/* * This class comes as is, no warranties whatsoever. * Copyright Comerge AG 2009. All Rights Reserved." * * http://comerge.net */ package templates; import java.util.HashSet; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.UniqueEList; import ch.ethz.origo.aranea.messageDsl.Message; import ch.ethz.origo.aranea.messageDsl.Namespace; import ch.ethz.origo.aranea.messageDsl.Project; /** * @author Benno Baumgartner (benno.baumgartner@comerge.net) * @author Patrick Ruckstuhl */ public class Utils { private static HashSet JAVA_KEY_WORDS; static { JAVA_KEY_WORDS = new HashSet(); JAVA_KEY_WORDS.add("abstract"); JAVA_KEY_WORDS.add("continue"); JAVA_KEY_WORDS.add("for"); JAVA_KEY_WORDS.add("new"); JAVA_KEY_WORDS.add("switch"); JAVA_KEY_WORDS.add("assert"); JAVA_KEY_WORDS.add("default"); JAVA_KEY_WORDS.add("goto"); JAVA_KEY_WORDS.add("package"); JAVA_KEY_WORDS.add("synchronized"); JAVA_KEY_WORDS.add("boolean"); JAVA_KEY_WORDS.add("do"); JAVA_KEY_WORDS.add("if"); JAVA_KEY_WORDS.add("private"); JAVA_KEY_WORDS.add("this"); JAVA_KEY_WORDS.add("break"); JAVA_KEY_WORDS.add("double"); JAVA_KEY_WORDS.add("implements"); JAVA_KEY_WORDS.add("protected"); JAVA_KEY_WORDS.add("throw"); JAVA_KEY_WORDS.add("byte"); JAVA_KEY_WORDS.add("else"); JAVA_KEY_WORDS.add("import"); JAVA_KEY_WORDS.add("public"); JAVA_KEY_WORDS.add("throws"); JAVA_KEY_WORDS.add("case"); JAVA_KEY_WORDS.add("enum"); JAVA_KEY_WORDS.add("instanceof"); JAVA_KEY_WORDS.add("return"); JAVA_KEY_WORDS.add("transient"); JAVA_KEY_WORDS.add("catch"); JAVA_KEY_WORDS.add("extends"); JAVA_KEY_WORDS.add("int"); JAVA_KEY_WORDS.add("short"); JAVA_KEY_WORDS.add("try"); JAVA_KEY_WORDS.add("char"); JAVA_KEY_WORDS.add("final"); JAVA_KEY_WORDS.add("interface"); JAVA_KEY_WORDS.add("static"); JAVA_KEY_WORDS.add("void"); JAVA_KEY_WORDS.add("class"); JAVA_KEY_WORDS.add("finally"); JAVA_KEY_WORDS.add("long"); JAVA_KEY_WORDS.add("strictfp"); JAVA_KEY_WORDS.add("volatile"); JAVA_KEY_WORDS.add("const"); JAVA_KEY_WORDS.add("float"); JAVA_KEY_WORDS.add("native"); JAVA_KEY_WORDS.add("super"); JAVA_KEY_WORDS.add("while"); } public static String underscoreToCamelCase(String s) { String[] names = s.split("_"); String result = ""; for (int i = 0; i < names.length; i++) { String name = names[i]; if (name.length() > 0) { result += Character.toUpperCase(name.charAt(0)) + name.substring(1); } } return result; } public static String camelCaseToQualified(String s) { String[] elements = s.replaceAll("([a-z0-9])([A-Z])", "$1.$2").split( "\\."); StringBuilder result = new StringBuilder(); for (int i = 0; i < elements.length; i++) { String element = elements[i]; if (i != 0) result.append("."); result.append(escapeJavaKeyword(element.toLowerCase())); } return result.toString(); } public static String camelCaseToPath(String s) { String result = camelCaseToQualified(s); return result.replaceAll("\\.", "/"); } public static String escapeJavaKeyword(String s) { if (JAVA_KEY_WORDS.contains(s)) { return s + "_"; } return s; } /** * Retrieve all reference namespaces for a given project * * @param p * project (not null) * @return list of namespaces referenced by the project (not null) */ public static EList referencedNamespaces(Project p) { Set result = new HashSet(); for (Namespace namespace : p.getNamespaces()) { for (Message message : namespace.getMessages()) { if (message.getExtends() != null) { result.add((Namespace) message.getExtends().eContainer()); } } } return new UniqueEList(result); } }