From bab1f7d6a84c5cc45cfe165a732ec24420d0ad2b Mon Sep 17 00:00:00 2001 From: Heinrich Filter Date: Tue, 27 Jun 2017 23:12:32 +0200 Subject: [PATCH] Add VrpXMLWrite method that returns OutputStream Add test to check that two outputs are the same --- .../jsprit/io/problem/VrpXMLWriter.java | 55 +++++++++++++------ .../jsprit/io/problem/VrpXMLWriterTest.java | 17 ++++++ 2 files changed, 54 insertions(+), 18 deletions(-) diff --git a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java index 024d4958..57ba77f2 100644 --- a/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java +++ b/jsprit-io/src/main/java/com/graphhopper/jsprit/io/problem/VrpXMLWriter.java @@ -41,9 +41,7 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; +import java.io.*; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -94,8 +92,36 @@ public class VrpXMLWriter { public void write(String filename) { if (!filename.endsWith(".xml")) filename += ".xml"; log.info("write vrp: " + filename); + XMLConf xmlConfig = createXMLConfiguration(); + + try { + xmlConfig.setFileName(filename); + Writer out = new FileWriter(filename); + XMLSerializer serializer = new XMLSerializer(out, createOutputFormat()); + serializer.serialize(xmlConfig.getDocument()); + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public OutputStream write() { + XMLConf xmlConfig = createXMLConfiguration(); + OutputStream out = new ByteArrayOutputStream(); + + try { + XMLSerializer serializer = new XMLSerializer(out, createOutputFormat()); + serializer.serialize(xmlConfig.getDocument()); + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + + return out; + } + + private XMLConf createXMLConfiguration() { XMLConf xmlConfig = new XMLConf(); - xmlConfig.setFileName(filename); xmlConfig.setRootElementName("problem"); xmlConfig.setAttributeSplittingDisabled(true); xmlConfig.setDelimiterParsingDisabled(true); @@ -123,10 +149,6 @@ public class VrpXMLWriter { writeSolutions(xmlConfig); - OutputFormat format = new OutputFormat(); - format.setIndenting(true); - format.setIndent(5); - try { Document document = xmlConfig.createDoc(); @@ -138,17 +160,14 @@ public class VrpXMLWriter { } catch (ConfigurationException e) { throw new RuntimeException(e); } + return xmlConfig; + } - try { - Writer out = new FileWriter(filename); - XMLSerializer serializer = new XMLSerializer(out, format); - serializer.serialize(xmlConfig.getDocument()); - out.close(); - } catch (IOException e) { - throw new RuntimeException(e); - } - - + private OutputFormat createOutputFormat() { + OutputFormat format = new OutputFormat(); + format.setIndenting(true); + format.setIndent(5); + return format; } private void writeInitialRoutes(XMLConf xmlConfig) { diff --git a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java index 5783f398..54ea122f 100644 --- a/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java +++ b/jsprit-io/src/test/java/com/graphhopper/jsprit/io/problem/VrpXMLWriterTest.java @@ -34,6 +34,10 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -621,6 +625,19 @@ public class VrpXMLWriterTest { assertEquals("2", Solutions.bestOf(solutionsToRead).getUnassignedJobs().iterator().next().getId()); } + @Test + public void outputStreamAndFileContentsAreEqual() throws IOException { + VehicleRoutingProblem.Builder builder = twoVehicleTypesAndImpls(); + VehicleRoutingProblem vrp = builder.build(); + + new VrpXMLWriter(vrp, null).write(infileName); + String outputStringFromFile = new String(Files.readAllBytes(Paths.get(infileName))); + String outputStringFromStream = new VrpXMLWriter(vrp, null).write().toString(); + + assertEquals(outputStringFromFile, outputStringFromStream); + + } + private VehicleRoutingProblem writeAndRereadXml(VehicleRoutingProblem vrp) { new VrpXMLWriter(vrp, null).write(infileName);