/*
* eXist Open Source Native XML Database
* Copyright (C) 2001-04 The eXist Team
*
* http://exist-db.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id$
*/
package org.exist.xmldb.concurrent.action;
import java.util.Random;
import junit.framework.Assert;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.modules.XPathQueryService;
import org.xmldb.api.modules.XUpdateQueryService;
/**
* @author wolf
*/
public class TextUpdateAction extends Action {
private final static String UPDATE_START =
"<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
"<xu:update select=\"/article/section\">" +
"<para>";
private final static String UPDATE_END =
"</para>" +
"</xu:update>" +
"</xu:modifications>";
private final static String APPEND =
"<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
"<xu:append select=\"/article\">" +
"<section>" +
"<title>Hello</title>" +
"<para>Hello World!</para>" +
"</section>" +
"</xu:append>" +
"</xu:modifications>";
private final static String REMOVE =
"<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
"<xu:remove select=\"/article/section\"/>" +
"</xu:modifications>";
private Random rand;
/**
* @param collectionPath
* @param resourceName
*/
public TextUpdateAction(String collectionPath, String resourceName) {
super(collectionPath, resourceName);
rand = new Random();
}
/* (non-Javadoc)
* @see org.exist.xmldb.test.concurrent.Action#execute()
*/
public boolean execute() throws Exception {
Collection col = DatabaseManager.getCollection(collectionPath, "admin", null);
XUpdateQueryService service = (XUpdateQueryService)
col.getService("XUpdateQueryService", "1.0");
// append a new section
long mods = service.update(APPEND);
Assert.assertEquals(1, mods);
// update paragraph content
String updateText = Integer.toString(rand.nextInt()) + " & " + Integer.toString(rand.nextInt());
String update = UPDATE_START + updateText + UPDATE_END;
mods = service.update(update);
Assert.assertEquals(1, mods);
System.out.println(mods + " nodes updated.");
// query for section
XPathQueryService query = (XPathQueryService)
col.getService("XPathQueryService", "1.0");
ResourceSet result = query.query("/article/section/para/text()");
Assert.assertEquals(1, result.getSize());
updateText = result.getResource(0).getContent().toString();
result = query.query("/article/section/para[. = '" + updateText + "']");
Assert.assertEquals(1, result.getSize());
System.out.println(result.getResource(0).getContent().toString());
mods = service.update(REMOVE);
Assert.assertEquals(1, mods);
return false;
}
}