1 /* 2 * Copyright (C) 2021 The Dagger Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package buildtests; 18 19 import java.io.BufferedWriter; 20 import java.io.File; 21 import java.io.FileWriter; 22 import java.io.IOException; 23 import java.nio.file.Path; 24 25 /** Used to create files for a Gradle module in a particular directory. */ 26 public final class GradleModule { create(File moduleDir)27 public static GradleModule create(File moduleDir) { 28 return new GradleModule(moduleDir); 29 } 30 create(File projectDir, String moduleName)31 public static GradleModule create(File projectDir, String moduleName) { 32 return new GradleModule(new File(projectDir, moduleName)); 33 } 34 35 private final File moduleDir; 36 private final File moduleSrcDir; 37 GradleModule(File moduleDir)38 private GradleModule(File moduleDir) { 39 this.moduleDir = moduleDir; 40 this.moduleSrcDir = new File(moduleDir, "src/main/java/"); 41 } 42 getDir()43 public Path getDir() { 44 return moduleDir.toPath(); 45 } 46 addBuildFile(String... content)47 public GradleModule addBuildFile(String... content) throws IOException { 48 writeFile(createFile(moduleDir, "build.gradle"), content); 49 return this; 50 } 51 addSettingsFile(String... content)52 public GradleModule addSettingsFile(String... content) throws IOException { 53 writeFile(createFile(moduleDir, "settings.gradle"), content); 54 return this; 55 } 56 addFile(GradleFile gradleFile)57 public GradleModule addFile(GradleFile gradleFile) throws IOException { 58 return addFile(gradleFile.fileName(), gradleFile.fileContent()); 59 } 60 addFile(String fileName, String... content)61 public GradleModule addFile(String fileName, String... content) throws IOException { 62 writeFile(createFile(moduleDir, fileName), content); 63 return this; 64 } 65 addSrcFiles(GradleFile... gradleFiles)66 public GradleModule addSrcFiles(GradleFile... gradleFiles) throws IOException { 67 for (GradleFile gradleFile : gradleFiles) { 68 addSrcFile(gradleFile.fileName(), gradleFile.fileContent()); 69 } 70 return this; 71 } 72 addSrcFile(GradleFile gradleFile)73 public GradleModule addSrcFile(GradleFile gradleFile) throws IOException { 74 return addSrcFile(gradleFile.fileName(), gradleFile.fileContent()); 75 } 76 addSrcFile(String fileName, String... content)77 public GradleModule addSrcFile(String fileName, String... content) throws IOException { 78 writeFile(createFile(moduleSrcDir, fileName), content); 79 return this; 80 } 81 createFile(File dir, String fileName)82 private static File createFile(File dir, String fileName) { 83 File file = new File(dir, fileName); 84 file.getParentFile().mkdirs(); 85 return file; 86 } 87 writeFile(File destination, String... content)88 private static void writeFile(File destination, String... content) throws IOException { 89 BufferedWriter output = null; 90 try { 91 output = new BufferedWriter(new FileWriter(destination)); 92 for (String line : content) { 93 output.write(line + "\n"); 94 } 95 } finally { 96 if (output != null) { 97 output.close(); 98 } 99 } 100 } 101 } 102