summaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java')
-rw-r--r--document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java183
1 files changed, 13 insertions, 170 deletions
diff --git a/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java b/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java
index a24f1abd22b..7bc0cc871ca 100644
--- a/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java
+++ b/document/src/main/java/com/yahoo/vespaxmlparser/VespaXMLFeedReader.java
@@ -56,7 +56,7 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
/**
* Skips the initial "vespafeed" tag.
*/
- void readInitial() throws Exception {
+ private void readInitial() throws Exception {
boolean found = false;
while (reader.hasNext()) {
@@ -74,127 +74,6 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
}
}
- public enum OperationType {
- DOCUMENT,
- REMOVE,
- UPDATE,
- INVALID
- }
-
- /**
- * Represents a feed operation found by the parser. Can be one of the following types:
- * - getType() == DOCUMENT: getDocument() is valid.
- * - getType() == REMOVE: getRemove() is valid.
- * - getType() == UPDATE: getUpdate() is valid.
- */
- public static class Operation {
-
- private OperationType type;
- private Document doc;
- private DocumentId remove;
- private DocumentUpdate docUpdate;
- private FeedOperation feedOperation;
- private TestAndSetCondition condition;
-
- public Operation() {
- setInvalid();
- }
-
- public void setInvalid() {
- type = OperationType.INVALID;
- doc = null;
- remove = null;
- docUpdate = null;
- feedOperation = null;
- condition = null;
- }
-
- public OperationType getType() {
- return type;
- }
-
- public Document getDocument() {
- return doc;
- }
-
- public void setDocument(Document doc) {
- this.type = OperationType.DOCUMENT;
- this.doc = doc;
- }
-
- public DocumentId getRemove() {
- return remove;
- }
-
- public void setRemove(DocumentId remove) {
- this.type = OperationType.REMOVE;
- this.remove = remove;
- }
-
- public DocumentUpdate getDocumentUpdate() {
- return docUpdate;
- }
-
- public void setDocumentUpdate(DocumentUpdate docUpdate) {
- this.type = OperationType.UPDATE;
- this.docUpdate = docUpdate;
- }
-
- public FeedOperation getFeedOperation() {
- return feedOperation;
- }
-
- public void setCondition(TestAndSetCondition condition) {
- this.condition = condition;
- }
-
- public TestAndSetCondition getCondition() {
- return condition;
- }
-
- @Override
- public String toString() {
- return "Operation{" +
- "type=" + type +
- ", doc=" + doc +
- ", remove=" + remove +
- ", docUpdate=" + docUpdate +
- ", feedOperation=" + feedOperation +
- '}';
- }
- }
-
- public static class FeedOperation {
-
- private String name;
- private Integer generation;
- private Integer increment;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getGeneration() {
- return generation;
- }
-
- public void setGeneration(int generation) {
- this.generation = generation;
- }
-
- public Integer getIncrement() {
- return increment;
- }
-
- public void setIncrement(int increment) {
- this.increment = increment;
- }
- }
-
/**
* <p>Reads all operations from the XML stream and puts into a list. Note
* that if the XML stream is large, this may cause out of memory errors, so
@@ -202,12 +81,11 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
*
* @return The list of all read operations.
*/
- public List<Operation> readAll() throws Exception {
- List<Operation> list = new ArrayList<Operation>();
+ public List<FeedOperation> readAll() throws Exception {
+ List<FeedOperation> list = new ArrayList<>();
while (true) {
- Operation op = new Operation();
- read(op);
- if (op.getType() == OperationType.INVALID) {
+ FeedOperation op = read();
+ if (op.getType() == FeedOperation.Type.INVALID) {
return list;
} else {
list.add(op);
@@ -219,10 +97,8 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
* @see com.yahoo.vespaxmlparser.FeedReader#read(com.yahoo.vespaxmlparser.VespaXMLFeedReader.Operation)
*/
@Override
- public void read(Operation operation) throws Exception {
+ public FeedOperation read() throws Exception {
String startTag = null;
- operation.setInvalid();
-
try {
while (reader.hasNext()) {
int type = reader.next();
@@ -233,36 +109,28 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
if ("document".equals(startTag)) {
VespaXMLDocumentReader documentReader = new VespaXMLDocumentReader(reader, docTypeManager);
Document document = new Document(documentReader);
- operation.setDocument(document);
- operation.setCondition(TestAndSetCondition.fromConditionString(documentReader.getCondition()));
- return;
+ return new DocumentFeedOperation(document, TestAndSetCondition.fromConditionString(documentReader.getCondition()));
} else if ("update".equals(startTag)) {
VespaXMLUpdateReader updateReader = new VespaXMLUpdateReader(reader, docTypeManager);
DocumentUpdate update = new DocumentUpdate(updateReader);
- operation.setDocumentUpdate(update);
- operation.setCondition(TestAndSetCondition.fromConditionString(updateReader.getCondition()));
- return;
+ return new DocumentUpdateFeedOperation(update, TestAndSetCondition.fromConditionString(updateReader.getCondition()));
} else if ("remove".equals(startTag)) {
- boolean documentIdFound = false;
+ DocumentId documentId = null;
Optional<String> condition = Optional.empty();
for (int i = 0; i < reader.getAttributeCount(); i++) {
final String attributeName = reader.getAttributeName(i).toString();
if ("documentid".equals(attributeName) || "id".equals(attributeName)) {
- operation.setRemove(new DocumentId(reader.getAttributeValue(i)));
- documentIdFound = true;
+ documentId = new DocumentId(reader.getAttributeValue(i));
} else if ("condition".equals(attributeName)) {
condition = Optional.of(reader.getAttributeValue(i));
}
}
- if (!documentIdFound) {
+ if (documentId == null) {
throw newDeserializeException("Missing \"documentid\" attribute for remove operation");
}
-
- operation.setCondition(TestAndSetCondition.fromConditionString(condition));
-
- return;
+ return new RemoveFeedOperation(documentId, TestAndSetCondition.fromConditionString(condition));
} else {
throw newDeserializeException("Element \"" + startTag + "\" not allowed in this context");
}
@@ -281,32 +149,7 @@ public class VespaXMLFeedReader extends VespaXMLReader implements FeedReader {
throw(e);
}
- }
-
- public void read(FeedOperation fo) throws XMLStreamException {
- while (reader.hasNext()) {
- int type = reader.next();
-
- if (type == XMLStreamReader.START_ELEMENT) {
- if ("name".equals(reader.getName().toString())) {
- fo.setName(reader.getElementText().toString());
- skipToEnd("name");
- } else if ("generation".equals(reader.getName().toString())) {
- fo.setGeneration(Integer.parseInt(reader.getElementText().toString()));
- skipToEnd("generation");
- } else if ("increment".equals(reader.getName().toString())) {
- String text = reader.getElementText();
- if ("autodetect".equals(text)) {
- fo.setIncrement(-1);
- } else {
- fo.setIncrement(Integer.parseInt(text));
- }
- skipToEnd("increment");
- }
- } else if (type == XMLStreamReader.END_ELEMENT) {
- return;
- }
- }
+ return FeedOperation.INVALID;
}
}