package org.basex.examples.server; import java.io.*; import org.basex.*; import org.basex.api.client.*; import org.basex.core.cmd.*; import org.basex.examples.local.*; /** * This class demonstrates database access via the client/server architecture. * It shows how to add and modify files. * For further options see {@link QueryCollection}. * * @author BaseX Team 2005-17, BSD License */ public final class ServerCollection { /** * Runs the example code. * @param args (ignored) command-line arguments * @throws Exception exception */ public static void main(final String... args) throws Exception { System.out.println("=== ServerCollection ==="); // Start server System.out.println("\n* Start server."); BaseXServer server = new BaseXServer(); // Create a client session with host name, port, user name and password try(ClientSession session = new ClientSession("localhost", 1984, "admin", "admin")) { System.out.println("\n* Create a Collection."); session.execute("CREATE DB input"); // Add some 50 documents System.out.println("\n* Adding 50 documents"); // XML fragment to add String xml1 = "<text version=\"draft\"><title>Chapter "; String xml2 = "</title></text>"; for(int i = 0; i < 50; i++) { String path = "/book/chapters/" + i + "/Chapter-" + i + ".xml"; add(session, path, xml1 + i + xml2); } // Add another Test Document in folder /book/chapters/0 String path = "/book/chapters/0/Chapter-test.xml"; add(session, path, xml1 + "test" + xml2); // Find some documents using the collection command find(session); // Modify specific document(s) System.out.println("\n* Modifying documents in folder /book/chapters/0:"); modify(session); // Drop the database session.execute("DROP DB input"); } // Stop the server System.out.println("\n* Stop server."); server.stop(); } /** * This Methods performs a simple path based search in a collection. * @param session client session * @throws IOException I/O exception */ private static void find(final ClientSession session) throws IOException { System.out.println("\n* Finding documents in folder /book/chapters/0:"); System.out.println(session.execute( new XQuery( "for $doc in collection('input/book/chapters/0') " + "return $doc"))); } /** * This method shows how to modify multiple documents at once. * It replaces the title of the matching documents with 1 2 3. * @param session client session * @throws IOException I/O exception */ private static void modify(final ClientSession session) throws IOException { session.execute(new XQuery( "for $doc in collection('input/book/chapters/0/')" + " return " + "replace value of node $doc/text/title " + "with (1 to 3)")); // Validate result System.out.println(session.execute(new XQuery( "for $doc in collection('input/book/chapters/0')" + " return $doc"))); } /** * Adds a document to the collection. * @param target optional target path * @param session client session * @param xmlFragment XML Fragment * @throws IOException I/O exception */ private static void add(final ClientSession session, final String target, final String xmlFragment) throws IOException { session.execute(new Add(target, xmlFragment)); } }