package org.tessell.generators; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import joist.sourcegen.GClass; import joist.util.Inflector; import org.apache.commons.io.FileUtils; public class GenUtils { /** Hacky way of doing command args -> map. */ public static Map<String, String> parseArgs(final String[] args) { final Map<String, String> settings = new HashMap<String, String>(); for (int i = 0; i < args.length;) { settings.put(args[i++].substring(2), args[i++]); } return settings; } /** Munge a CSS class name into a Java identifier. */ public static String toMethodName(final String className) { final StringBuilder sb = new StringBuilder(); char c = className.charAt(0); boolean nextUpCase = false; if (Character.isJavaIdentifierStart(c)) { sb.append(Character.toLowerCase(c)); } for (int i = 1, j = className.length(); i < j; i++) { c = className.charAt(i); if (!Character.isJavaIdentifierPart(c)) { nextUpCase = true; continue; } if (nextUpCase) { nextUpCase = false; c = Character.toUpperCase(c); } sb.append(c); } // throw in a camelize for good measure return Inflector.uncapitalize(Inflector.camelize(sb.toString())); } /** Saves {@code gc} to {@code outputDirectory} if needed. */ public static void saveIfChanged(File outputDirectory, GClass gc) { File outputFile = new File(outputDirectory, gc.getFileName()); saveIfChanged(outputFile, gc.toCode()); } /** Saves {@code newContent} to {@code outputFile} if needed. */ public static void saveIfChanged(File outputFile, String newContent) { try { String oldContent = outputFile.exists() ? FileUtils.readFileToString(outputFile) : ""; if (!oldContent.equals(newContent)) { System.out.println(outputFile); FileUtils.writeStringToFile(outputFile, newContent); } } catch (IOException io) { throw new RuntimeException(io); } } }