package io.swagger.parser; import com.fasterxml.jackson.databind.JsonNode; import io.swagger.parser.util.DeserializationUtils; import io.swagger.util.Yaml; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Iterator; public class JsonToYamlFileDuplicator { private static final Logger LOGGER = LoggerFactory.getLogger(JsonToYamlFileDuplicator.class); public static void duplicateFilesInYamlFormat(String inputDirectoryStr, String outputDirectoryStr) { Path outputDirectory = Paths.get(outputDirectoryStr); Path inputDirectory = Paths.get(inputDirectoryStr); deleteAndRecreateOutputDirectory(outputDirectory); final Iterator<File> fileIterator = FileUtils.iterateFiles(inputDirectory.toFile(), new String[]{"json"}, true); while (fileIterator.hasNext()) { File next = fileIterator.next(); System.out.println("Processing " + next); processFile(next, inputDirectory, outputDirectory); } } private static void processFile(File next, Path inputDirectory, Path outputDirectory) { try { String fileContents = IOUtils.toString(new FileInputStream(next)); fileContents = fileContents.replaceAll("\\.json", ".yaml"); final JsonNode jsonNode = DeserializationUtils.deserializeIntoTree(fileContents, next.toString()); final String yamlOutput = Yaml.mapper().writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode); final String relativePath = "./" + next.toString().replace(inputDirectory.toString(), "").replace(".json", ".yaml"); final Path outputFile = outputDirectory.resolve(relativePath).normalize(); LOGGER.debug("output file: " + outputFile); final File file = outputFile.toAbsolutePath().toFile(); FileUtils.forceMkdir(outputFile.getParent().toFile()); FileUtils.write(file, yamlOutput); } catch (IOException e) { throw new RuntimeException("Could not process file " + next, e); } } private static void deleteAndRecreateOutputDirectory(Path outputDirectory) { try { FileUtils.deleteDirectory(outputDirectory.toFile()); outputDirectory.toFile().mkdirs(); } catch (IOException e) { throw new RuntimeException("Unable to delete directory: " + outputDirectory, e); } } }