Skip to content

Commit

Permalink
Replace operation fixed.
Browse files Browse the repository at this point in the history
  • Loading branch information
JohannesLichtenberger committed May 19, 2018
1 parent 4736714 commit c6438ec
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions src/main/java/org/brackit/xquery/update/op/ReplaceNodeOp.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@

import java.util.Arrays;
import org.brackit.xquery.QueryException;
import org.brackit.xquery.xdm.DocumentException;
import org.brackit.xquery.xdm.Kind;
import org.brackit.xquery.xdm.Node;
import org.brackit.xquery.xdm.OperationNotSupportedException;

/**
* Base class for all insert operations.
Expand Down Expand Up @@ -69,20 +71,39 @@ public void apply() throws QueryException {
insertAfter = false;
ancorNode = target.getParent();
}
// for (int i = 0; i < size; i++) {
// target.insertBefore(content[i]);
// }
target.delete();

for (int i = 0; i < size; i++) {
if (insertAfter)
ancorNode.insertAfter(content[i]);
else
ancorNode.prepend(content[i]);
if (target.getKind() == Kind.TEXT) {
deleteAndThenInsert(ancorNode, insertAfter);
} else {
insertAndThenDelete(ancorNode, insertAfter);
}
}
}

private void insertAndThenDelete(Node<?> ancorNode, boolean insertAfter)
throws OperationNotSupportedException, DocumentException {
insert(ancorNode, insertAfter);

target.delete();
}

private void deleteAndThenInsert(Node<?> ancorNode, boolean insertAfter)
throws DocumentException, OperationNotSupportedException {
target.delete();

insert(ancorNode, insertAfter);
}

private void insert(Node<?> ancorNode, boolean insertAfter)
throws OperationNotSupportedException, DocumentException {
for (int i = 0; i < size; i++) {
if (insertAfter)
ancorNode.insertAfter(content[i]);
else
ancorNode.prepend(content[i]);
}
}

@Override
public Node<?> getTarget() {
return target;
Expand Down

0 comments on commit c6438ec

Please sign in to comment.