/** * Converts a proto file name into a class name according to the rules defined by protobuf: * https://developers.google.com/protocol-buffers/docs/reference/java-generated * * The file name will be camel cased (and underscores, hyphens etc. stripped out). * @param protoFileName The file name to process: e.g. my_service.proto * @return The class name: MyService */ public static String toClassName(String protoFileName) { if (protoFileName == null) { return null; } String fileName = FileUtil.stripPath(protoFileName); fileName = FileUtil.stripExtension(fileName); String parts[] = fileName.split("[^A-Za-z0-9]"); StringBuilder classNameBuilder = new StringBuilder(); for (String part : parts) { classNameBuilder.append(StringUtils.capitalize(part)); } return classNameBuilder.toString(); } }
@Test public void stripExtension() { assertThat(FileUtil.stripExtension("/usr/local/blah/blah/myfileName.txt")).isEqualTo("/usr/local/blah/blah/myfileName"); assertThat(FileUtil.stripExtension("C:/Program\\ Files/Applications/SomeFile.app")).isEqualTo("C:/Program\\ Files/Applications/SomeFile"); assertThat(FileUtil.stripExtension("SomeFile.app")).isEqualTo("SomeFile"); assertThat(FileUtil.stripExtension("/home/jbloggs/SomeFile.longfileextension")).isEqualTo("/home/jbloggs/SomeFile"); assertThat(FileUtil.stripExtension("")).isEqualTo(""); assertThat(FileUtil.stripExtension(" ")).isEqualTo(" "); assertThat(FileUtil.stripExtension(null)).isEqualTo(""); }
@Test public void stripPath() { assertThat(FileUtil.stripPath("/usr/local/blah/blah/myfileName.txt")).isEqualTo("myfileName.txt"); assertThat(FileUtil.stripPath("C:/Program\\ Files/Applications/SomeFile.app")).isEqualTo("SomeFile.app"); assertThat(FileUtil.stripPath("SomeFile.app")).isEqualTo("SomeFile.app"); assertThat(FileUtil.stripPath("/home/jbloggs/SomeFile.longfileextension")).isEqualTo("SomeFile.longfileextension"); assertThat(FileUtil.stripPath("")).isEqualTo(""); assertThat(FileUtil.stripPath(" ")).isEqualTo(" "); assertThat(FileUtil.stripPath(null)).isEqualTo(""); }