/* * eXist Open Source Native XML Database * Copyright (C) 2001-04 The eXist Project * 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 junit.framework.Assert; import org.xmldb.api.DatabaseManager; import org.xmldb.api.base.Collection; import org.xmldb.api.base.ResourceSet; import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.XPathQueryService; import org.xmldb.api.modules.XUpdateQueryService; /** * @author wolf */ public class ValueAppendAction extends Action { private static final String REMOVE = "<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" + "<xu:remove select=\"//item[last()]\">" + "</xu:remove>" + "</xu:modifications>"; public ValueAppendAction(String collectionPath, String resourceName) { super(collectionPath, resourceName); } /* (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"); XPathQueryService query = (XPathQueryService) col.getService("XPathQueryService", "1.0"); append(service); query(query); remove(service); return false; } private void remove(XUpdateQueryService service) throws XMLDBException { System.out.println(Thread.currentThread().getName() + ": removing elements ..."); for(int i = 0; i < 10; i++) service.update(REMOVE); } private void append(XUpdateQueryService service) throws Exception { final String updateOpen = "<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" + "<xu:append select=\"/items\" child=\"1\">"; final String updateClose = "</xu:append>" + "</xu:modifications>"; System.out.println(Thread.currentThread().getName() + ": inserting elements ..."); for (int i = 0; i < 10; i++) { String update = updateOpen + "<item id=\"" + i + "\"><name>abcdefg</name>" + "<value>" + (44.53 + i) + "</value></item>" + updateClose; service.update(update); } } private void query(XPathQueryService service) throws Exception { ResourceSet result = service.queryResource(resourceName, "/items/item[value = 44.53]"); Assert.assertEquals(1, result.getSize()); result = service.queryResource(resourceName, "/items/item[@id=1]/name[.='abcdefg']/text()"); Assert.assertEquals(1, result.getSize()); Assert.assertEquals("abcdefg", result.getResource(0).getContent().toString()); } }