[New] Added additional methods in StrolchXmlHelper

This commit is contained in:
Robert von Burg 2021-12-30 00:39:13 +01:00
parent dbd9cd3127
commit edf350379b
2 changed files with 41 additions and 25 deletions

View File

@ -15,7 +15,11 @@
*/
package li.strolch.model.xml;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import li.strolch.model.Order;
import li.strolch.model.Resource;
@ -30,31 +34,22 @@ import li.strolch.model.activity.Activity;
*/
public class SimpleStrolchElementListener implements StrolchElementListener {
private Map<String, Resource> resources;
private Map<String, Order> orders;
private Map<String, Activity> activities;
private final Map<String, Resource> resources = new HashMap<>();
private final Map<String, Order> orders = new HashMap<>();
private final Map<String, Activity> activities = new HashMap<>();
@Override
public void notifyResource(Resource resource) {
if (this.resources == null) {
this.resources = new HashMap<>();
}
this.resources.put(resource.getId(), resource);
}
@Override
public void notifyOrder(Order order) {
if (this.orders == null) {
this.orders = new HashMap<>();
}
this.orders.put(order.getId(), order);
}
@Override
public void notifyActivity(Activity activity) {
if (this.activities == null) {
this.activities = new HashMap<>();
}
this.activities.put(activity.getId(), activity);
}
@ -71,20 +66,14 @@ public class SimpleStrolchElementListener implements StrolchElementListener {
}
public List<Resource> getResources() {
if (this.resources == null)
return Collections.emptyList();
return new ArrayList<>(this.resources.values());
}
public List<Order> getOrders() {
if (this.orders == null)
return Collections.emptyList();
return new ArrayList<>(this.orders.values());
}
public List<Activity> getActivities() {
if (this.activities == null)
return Collections.emptyList();
return new ArrayList<>(this.activities.values());
}
@ -95,4 +84,9 @@ public class SimpleStrolchElementListener implements StrolchElementListener {
elements.addAll(getActivities());
return elements;
}
public Stream<StrolchRootElement> streamElements() {
return Stream.concat(this.resources.values().stream(),
Stream.concat(this.orders.values().stream(), this.activities.values().stream()));
}
}

View File

@ -15,7 +15,9 @@ import java.nio.file.Files;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javanet.staxutils.IndentingXMLStreamWriter;
import li.strolch.model.Order;
@ -62,6 +64,12 @@ public class StrolchXmlHelper {
return elementListener.getElements();
}
public static Stream<StrolchRootElement> parseFileAsStream(File file) {
SimpleStrolchElementListener elementListener = new SimpleStrolchElementListener();
new XmlModelSaxFileReader(elementListener, file, false).parseFile();
return elementListener.streamElements();
}
public static List<StrolchRootElement> parseStream(InputStream stream, String encoding) {
SimpleStrolchElementListener elementListener = new SimpleStrolchElementListener();
new XmlModelSaxStreamReader(elementListener, stream, encoding).parseStream();
@ -78,6 +86,17 @@ public class StrolchXmlHelper {
logger.info("Wrote " + elements.size() + " elements to file " + file);
}
public static void writeToFile(File file, Stream<? extends StrolchRootElement> elements) {
int size;
try (OutputStream out = Files.newOutputStream(file.toPath())) {
size = writeToStream(out, elements);
} catch (Exception e) {
throw new RuntimeException("Failed to write elements to " + file, e);
}
logger.info("Wrote " + size + " elements to file " + file);
}
public static void writeToWriter(Writer writer, Collection<? extends StrolchRootElement> elements) {
try {
XMLStreamWriter xmlStreamWriter = prepareXmlStreamWriter(writer);
@ -95,16 +114,19 @@ public class StrolchXmlHelper {
public static void writeToStream(OutputStream out, Collection<? extends StrolchRootElement> elements)
throws Exception {
XMLStreamWriter writer = prepareXmlStreamWriter(out);
for (StrolchRootElement element : elements) {
element.accept(new StrolchElementToSaxWriterVisitor(writer));
}
elements.forEach(element -> element.accept(new StrolchElementToSaxWriterVisitor(writer)));
writer.writeEndDocument();
}
public static int writeToStream(OutputStream out, Stream<? extends StrolchRootElement> elements) throws Exception {
XMLStreamWriter writer = prepareXmlStreamWriter(out);
AtomicInteger size = new AtomicInteger();
elements.peek(e -> size.incrementAndGet()).forEach(e -> e.accept(new StrolchElementToSaxWriterVisitor(writer)));
writer.writeEndDocument();
return size.get();
}
public static XMLStreamWriter prepareXmlStreamWriter(Writer writer)
throws FactoryConfigurationError, XMLStreamException {