mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(ContextBlock): return dom nodes directly
This commit is contained in:
@@ -22,9 +22,7 @@ import javax.xml.transform.Transformer;
|
|||||||
import javax.xml.transform.TransformerFactory;
|
import javax.xml.transform.TransformerFactory;
|
||||||
import javax.xml.transform.dom.DOMSource;
|
import javax.xml.transform.dom.DOMSource;
|
||||||
import javax.xml.transform.stream.StreamResult;
|
import javax.xml.transform.stream.StreamResult;
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -166,8 +164,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
contextBlocks.stream()
|
contextBlocks.stream()
|
||||||
.sorted(Comparator.comparingInt(ContextBlock::getPriority))
|
.sorted(Comparator.comparingInt(ContextBlock::getPriority))
|
||||||
.map(ContextBlock::encodeToXml)
|
.map(ContextBlock::encodeToXml)
|
||||||
.forEach(blockXml -> {
|
.forEach(blockElement -> {
|
||||||
Element blockElement = parseElement(blockXml);
|
|
||||||
root.appendChild(document.importNode(blockElement, true));
|
root.appendChild(document.importNode(blockElement, true));
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -236,17 +233,6 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
parent.appendChild(element);
|
parent.appendChild(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Element parseElement(String xml) {
|
|
||||||
try {
|
|
||||||
Document parsedDocument = DocumentBuilderFactory.newInstance()
|
|
||||||
.newDocumentBuilder()
|
|
||||||
.parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
|
|
||||||
return parsedDocument.getDocumentElement();
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new IllegalStateException("解析 ContextBlock XML 失败", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void appendSupplyBlocks(Document document, Element inputRoot, List<ContextBlock> contextBlocks) {
|
private void appendSupplyBlocks(Document document, Element inputRoot, List<ContextBlock> contextBlocks) {
|
||||||
Map<String, List<ContextBlock>> groupedBlocks = filterContextBlocks(contextBlocks, ContextBlock.Type.SUPPLY).stream()
|
Map<String, List<ContextBlock>> groupedBlocks = filterContextBlocks(contextBlocks, ContextBlock.Type.SUPPLY).stream()
|
||||||
.collect(Collectors.groupingBy(
|
.collect(Collectors.groupingBy(
|
||||||
@@ -259,7 +245,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
|
|||||||
Element groupElement = document.createElement(entry.getKey());
|
Element groupElement = document.createElement(entry.getKey());
|
||||||
inputRoot.appendChild(groupElement);
|
inputRoot.appendChild(groupElement);
|
||||||
for (ContextBlock block : entry.getValue()) {
|
for (ContextBlock block : entry.getValue()) {
|
||||||
Element blockElement = parseElement(block.encodeToXml());
|
Element blockElement = block.encodeToXml();
|
||||||
groupElement.appendChild(document.importNode(blockElement, true));
|
groupElement.appendChild(document.importNode(blockElement, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ abstract class ContextBlock {
|
|||||||
SUPPLY
|
SUPPLY
|
||||||
}
|
}
|
||||||
|
|
||||||
fun encodeToXml(): String {
|
fun encodeToXml(): Element {
|
||||||
val document = DocumentBuilderFactory.newInstance()
|
val document = DocumentBuilderFactory.newInstance()
|
||||||
.newDocumentBuilder()
|
.newDocumentBuilder()
|
||||||
.newDocument()
|
.newDocument()
|
||||||
@@ -33,7 +33,7 @@ abstract class ContextBlock {
|
|||||||
|
|
||||||
fillXml(document, root)
|
fillXml(document, root)
|
||||||
|
|
||||||
return document.toXmlString()
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun fillXml(document: Document, root: Element)
|
protected abstract fun fillXml(document: Document, root: Element)
|
||||||
|
|||||||
Reference in New Issue
Block a user