diff --git a/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/reader/yaml/Reader.java b/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/reader/yaml/Reader.java index cf5b942374..5880ed39f3 100644 --- a/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/reader/yaml/Reader.java +++ b/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/reader/yaml/Reader.java @@ -15,6 +15,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.nio.file.Path; import org.eclipse.winery.model.tosca.yaml.TImportDefinition; import org.eclipse.winery.model.tosca.yaml.TServiceTemplate; @@ -42,6 +43,17 @@ public Reader() { this.yaml = new Yaml(); } + /** + * @param fileName the file to parse + */ + public TServiceTemplate parse(Path fileName) throws MultiException { + return this.readServiceTemplate(fileName.getParent().toString(), fileName.getFileName().toString(), Namespaces.DEFAULT_NS); + } + + /** + * @deprecated Use {@link Reader#parse(java.nio.file.Path)} + */ + @Deprecated public TServiceTemplate parse(String path, String file) throws MultiException { return this.readServiceTemplate(path, file, Namespaces.DEFAULT_NS); } diff --git a/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/writer/yaml/Writer.java b/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/writer/yaml/Writer.java index d87a3faea6..b76b49aec5 100644 --- a/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/writer/yaml/Writer.java +++ b/org.eclipse.winery.yaml.common/src/main/java/org/eclipse/winery/yaml/common/writer/yaml/Writer.java @@ -11,9 +11,11 @@ *******************************************************************************/ package org.eclipse.winery.yaml.common.writer.yaml; -import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.Map; import java.util.Objects; @@ -72,7 +74,13 @@ import org.eclipse.winery.yaml.common.Namespaces; import org.eclipse.winery.yaml.common.writer.yaml.support.Printer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class Writer extends AbstractVisitor { + + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractVisitor.class); + private final int INDENT_SIZE; public Writer() { @@ -83,19 +91,29 @@ public Writer(int indentSize) { this.INDENT_SIZE = indentSize; } - public void write(TServiceTemplate serviceTemplate, String fileName) { + public void write(TServiceTemplate serviceTemplate, Path fileName) { + Objects.requireNonNull(serviceTemplate); try { - File file = new File(fileName); - file.getParentFile().mkdir(); - FileWriter fileWriter = new FileWriter(file); + Files.createDirectories(Objects.requireNonNull(fileName).getParent()); + } catch (IOException e) { + LOGGER.debug("Could not create directory", e); + return; + } + try (FileWriter fileWriter = new FileWriter(fileName.toFile())) { fileWriter.write(this.visit(serviceTemplate, new Parameter(0)).toString()); - fileWriter.flush(); - fileWriter.close(); } catch (IOException e) { - e.printStackTrace(); + LOGGER.debug("Could write to file", e); } } + /** + * @deprecated Use {@link Writer#write(org.eclipse.winery.model.tosca.yaml.TServiceTemplate, java.nio.file.Path)} + */ + @Deprecated + public void write(TServiceTemplate serviceTemplate, String fileName) { + this.write(serviceTemplate, Paths.get(fileName)); + } + public Printer visit(TServiceTemplate node, Parameter parameter) { return new Printer(parameter.getIndent()) .printKeyValue("tosca_definitions_version", node.getToscaDefinitionsVersion()) diff --git a/org.eclipse.winery.yaml.common/src/test/java/org/eclipse/winery/yaml/common/writer/YamlWriterTest.java b/org.eclipse.winery.yaml.common/src/test/java/org/eclipse/winery/yaml/common/writer/YamlWriterTest.java index b8c0a7451c..0556d958ae 100644 --- a/org.eclipse.winery.yaml.common/src/test/java/org/eclipse/winery/yaml/common/writer/YamlWriterTest.java +++ b/org.eclipse.winery.yaml.common/src/test/java/org/eclipse/winery/yaml/common/writer/YamlWriterTest.java @@ -11,7 +11,12 @@ *******************************************************************************/ package org.eclipse.winery.yaml.common.writer; -import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Collection; +import java.util.Map; import org.eclipse.winery.model.tosca.yaml.TServiceTemplate; import org.eclipse.winery.yaml.common.reader.BuilderTests; @@ -20,158 +25,69 @@ import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +@RunWith(Parameterized.class) public class YamlWriterTest { - private static final String PATH = "src/test/resources/writer/tmp"; - private static final String FILE_TYPE = ".yml"; - - private Writer writer = new Writer(); - private Reader reader = new Reader(); - private BuilderTests builderTests = new BuilderTests(); - - private String getName(String name) { - return PATH + File.separator + name; - } - - @Test - public void toscaDefinitionsVersion() throws Exception { - String name = builderTests.toscaDefinitionsVersion().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.toscaDefinitionsVersion().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void metadata() throws Exception { - String name = builderTests.metadata().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.metadata().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void description() throws Exception { - String name = builderTests.description().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.description().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void dslDefinitions() throws Exception { - String name = builderTests.dslDefinitions().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.dslDefinitions().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); + private final Path yamlPath; + private final TServiceTemplate serviceTemplate; + + @Parameterized.Parameters + public static Collection data() throws Exception { + return Arrays.asList(new Object[][]{ + getParameter(builderTests.toscaDefinitionsVersion()), + getParameter(builderTests.metadata()), + getParameter(builderTests.description()), + getParameter(builderTests.dslDefinitions()), + getParameter(builderTests.repositories()), + getParameter(builderTests.artifactTypes()), + getParameter(builderTests.dataTypes()), + getParameter(builderTests.capabilityTypes()), + getParameter(builderTests.interfaceTypes()), + getParameter(builderTests.relationshipTypes()), + getParameter(builderTests.nodeTypes()), + getParameter(builderTests.groupTypes()), + getParameter(builderTests.policyTypes()), + getParameter(builderTests.example16()) + }); } - @Test - public void repositories() throws Exception { - String name = builderTests.repositories().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.repositories().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); + public static Object[] getParameter(Map.Entry entry) throws Exception { + return new Object[]{getYamlPath(entry.getKey()), entry.getValue()}; } - @Test - public void artifactTypes() throws Exception { - String name = builderTests.artifactTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.artifactTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void dataTypes() throws Exception { - String name = builderTests.dataTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.dataTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void capabilityTypes() throws Exception { - String name = builderTests.capabilityTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.capabilityTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void interfaceTypes() throws Exception { - String name = builderTests.interfaceTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.interfaceTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); - } - - @Test - public void relationshipTypes() throws Exception { - String name = builderTests.relationshipTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.relationshipTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); + private static final String FILE_TYPE = ".yml"; - Assert.assertEquals(serviceTemplate, out); - } + private static final BuilderTests builderTests = new BuilderTests(); - @Test - public void nodeTypes() throws Exception { - String name = builderTests.nodeTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.nodeTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); + private static Path temporaryFolder; - Assert.assertEquals(serviceTemplate, out); + static { + try { + temporaryFolder = Files.createTempDirectory("winery-yaml"); + } catch (IOException e) { + e.printStackTrace(); + } } - @Test - public void groupTypes() throws Exception { - String name = builderTests.groupTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.groupTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); + private Writer writer = new Writer(); + private Reader reader = new Reader(); - Assert.assertEquals(serviceTemplate, out); + private static Path getYamlPath(String name) throws Exception { + return temporaryFolder.resolve(name + FILE_TYPE); } - @Test - public void policyTypes() throws Exception { - String name = builderTests.policyTypes().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.policyTypes().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - - Assert.assertEquals(serviceTemplate, out); + public YamlWriterTest(Path yamlPath, TServiceTemplate serviceTemplate) { + this.yamlPath = yamlPath; + this.serviceTemplate = serviceTemplate; } @Test - public void example16() throws Exception { - - String name = builderTests.example16().getKey() + FILE_TYPE; - TServiceTemplate serviceTemplate = builderTests.example16().getValue(); - writer.write(serviceTemplate, getName(name)); - TServiceTemplate out = reader.parse(PATH, name); - + public void roundtrip() throws Exception { + writer.write(serviceTemplate, yamlPath); + TServiceTemplate out = reader.parse(yamlPath); Assert.assertEquals(serviceTemplate, out); } }