package org.exist.xmldb.concurrent.action;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.modules.XQueryService;
public class XQueryUpdateAction extends Action {
private final static String query =
"util:exclusive-lock(collection('/db/C1'),\n" +
" let $maxId := max(for $i in //node/@id return xs:integer($i)) + 1\n" +
" let $isLoggedIn := xmldb:login('/db/C1', 'guest', 'guest')\n" +
" let $update :=\n" +
" <xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">\n" +
" <xu:append select=\"/root\">\n" +
" <node id=\"{$maxId}\">appended node</node>\n" +
" </xu:append>\n" +
" </xu:modifications>\n" +
" return\n" +
" xmldb:update('/db/C1', $update)" +
")";
public XQueryUpdateAction(String collectionPath, String resourceName) {
super(collectionPath, resourceName);
}
public boolean execute() throws Exception {
Collection col = DatabaseManager.getCollection(collectionPath);
XQueryService service = (XQueryService) col.getService("XQueryService", "1.0");
service.query(query);
return false;
}
}