[New] Added additional methods in StrolchXmlHelper
This commit is contained in:
parent
dbd9cd3127
commit
edf350379b
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
Loading…
Reference in New Issue