From 538ded80b80c5900d534ec1a891810e3ce8d4dac Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 2 Mar 2017 19:41:22 +0100 Subject: [PATCH] [Fix] Fixed not closing document in StrolchXmlHelper, added test --- .../xml/SimpleStrolchElementListener.java | 8 +++++ .../strolch/model/xml/StrolchXmlHelper.java | 11 +++++- .../strolch/model/StrolchXmlHelperTest.java | 34 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 li.strolch.model/src/test/java/li/strolch/model/StrolchXmlHelperTest.java diff --git a/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java b/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java index 8cdb3cedc..22520fa78 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java +++ b/li.strolch.model/src/main/java/li/strolch/model/xml/SimpleStrolchElementListener.java @@ -91,4 +91,12 @@ public class SimpleStrolchElementListener implements StrolchElementListener { return Collections.emptyList(); return new ArrayList<>(this.activities.values()); } + + public List getElements() { + List elements = new ArrayList<>(); + elements.addAll(getResources()); + elements.addAll(getOrders()); + elements.addAll(getActivities()); + return elements; + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/xml/StrolchXmlHelper.java b/li.strolch.model/src/main/java/li/strolch/model/xml/StrolchXmlHelper.java index 9557c6a42..25de14fa2 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/xml/StrolchXmlHelper.java +++ b/li.strolch.model/src/main/java/li/strolch/model/xml/StrolchXmlHelper.java @@ -3,6 +3,7 @@ package li.strolch.model.xml; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; +import java.util.Collection; import java.util.List; import javax.xml.stream.FactoryConfigurationError; @@ -43,7 +44,13 @@ public class StrolchXmlHelper { return elementListener.getActivity(id); } - public static void writeToFile(File file, List elements) { + public static List parseFile(File file) { + SimpleStrolchElementListener elementListener = new SimpleStrolchElementListener(); + new XmlModelSaxFileReader(elementListener, file, false).parseFile(); + return elementListener.getElements(); + } + + public static void writeToFile(File file, Collection elements) { try (FileOutputStream out = new FileOutputStream(file)) { @@ -53,6 +60,8 @@ public class StrolchXmlHelper { element.accept(new StrolchElementToSaxWriterVisitor(writer)); } + writer.writeEndDocument(); + } catch (Exception e) { throw new RuntimeException("Failed to write elements to " + file, e); } diff --git a/li.strolch.model/src/test/java/li/strolch/model/StrolchXmlHelperTest.java b/li.strolch.model/src/test/java/li/strolch/model/StrolchXmlHelperTest.java new file mode 100644 index 000000000..813d4b686 --- /dev/null +++ b/li.strolch.model/src/test/java/li/strolch/model/StrolchXmlHelperTest.java @@ -0,0 +1,34 @@ +package li.strolch.model; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import org.junit.Test; + +import li.strolch.model.activity.Activity; +import li.strolch.model.activity.TimeOrdering; +import li.strolch.model.xml.StrolchXmlHelper; + +public class StrolchXmlHelperTest { + + @Test + public void shouldWriteAndReadXml() { + + File outFile = new File("target/" + getClass().getSimpleName()); + + Activity activity = ModelGenerator.createActivity("activity", "Activity", "Activity", TimeOrdering.SERIES); + Resource resource = ModelGenerator.createResource("res", "Res", "Res"); + Order order = ModelGenerator.createOrder("order", "Order", "Order"); + + Set elements = new HashSet<>(Arrays.asList(activity, resource, order)); + + StrolchXmlHelper.writeToFile(outFile, elements); + Set result = new HashSet<>(StrolchXmlHelper.parseFile(outFile)); + + assertEquals(elements, result); + } +}