From c4109698590ac4e99e051eca6abe94dc97c302f7 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 18 Nov 2009 13:54:33 +0000 Subject: [PATCH] Introduce Jackrabbit sandbox git-svn-id: https://svn.argeo.org/commons/trunk@3099 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- sandbox/pom.xml | 16 ++++ .../org.argeo.sandbox.jackrabbit/.classpath | 8 ++ .../org.argeo.sandbox.jackrabbit/.project | 23 ++++++ .../.settings/org.eclipse.jdt.core.prefs | 5 ++ .../.settings/org.maven.ide.eclipse.prefs | 9 +++ .../org.argeo.sandbox.jackrabbit/pom.xml | 29 +++++++ .../src/main/java/FirstHop.java | 30 +++++++ .../src/main/java/SecondHop.java | 44 +++++++++++ .../src/main/java/ThirdHop.java | 79 +++++++++++++++++++ .../src/main/java/jcr/Base.java | 24 ++++++ .../src/main/java/jcr/CommandLineQuery.java | 70 ++++++++++++++++ .../src/main/java/jcr/ReadData.java | 37 +++++++++ .../src/main/java/jcr/RemoveData.java | 33 ++++++++ .../src/main/java/jcr/StoreData.java | 33 ++++++++ .../src/main/java/webdav/WebDavTest.java | 46 +++++++++++ .../src/main/resources/log4j.properties | 8 ++ .../org.argeo.sandbox.jackrabbit/test.xml | 52 ++++++++++++ sandbox/runtime/pom.xml | 17 ++++ 18 files changed, 563 insertions(+) create mode 100644 sandbox/pom.xml create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/.classpath create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/.project create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.eclipse.jdt.core.prefs create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.maven.ide.eclipse.prefs create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/FirstHop.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/SecondHop.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/ThirdHop.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/Base.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/CommandLineQuery.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/ReadData.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/RemoveData.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/StoreData.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties create mode 100644 sandbox/runtime/org.argeo.sandbox.jackrabbit/test.xml create mode 100644 sandbox/runtime/pom.xml diff --git a/sandbox/pom.xml b/sandbox/pom.xml new file mode 100644 index 000000000..7f5205917 --- /dev/null +++ b/sandbox/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + org.argeo.commons + 0.1.2-SNAPSHOT + argeo-commons + .. + + sandbox + Commons Sandbox + pom + + runtime + + \ No newline at end of file diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/.classpath b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.classpath new file mode 100644 index 000000000..70a3874cc --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/.project b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.project new file mode 100644 index 000000000..ff231666e --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.project @@ -0,0 +1,23 @@ + + + org.argeo.sandbox.jackrabbit + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.eclipse.jdt.core.prefs b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..eb14ec4c7 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Wed Nov 18 14:52:46 CET 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.maven.ide.eclipse.prefs b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..7674ae319 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Wed Nov 18 14:52:42 CET 2009 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml b/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml new file mode 100644 index 000000000..c15555080 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/pom.xml @@ -0,0 +1,29 @@ + + 4.0.0 + + org.argeo.commons.sandbox + 0.1.2-SNAPSHOT + runtime + .. + + org.argeo.sandbox.jackrabbit + + + org.argeo.dep.osgi + org.argeo.dep.osgi.jackrabbit + 1.6.0.0001 + + + org.argeo.commons.basic + org.argeo.basic.dep.log4j + 0.1.2-SNAPSHOT + pom + + + org.apache.derby + com.springsource.org.apache.derby + 10.5.1000001.764942 + + + \ No newline at end of file diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/FirstHop.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/FirstHop.java new file mode 100644 index 000000000..a7897dbdb --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/FirstHop.java @@ -0,0 +1,30 @@ +import javax.jcr.Repository; +import javax.jcr.Session; +import org.apache.jackrabbit.core.TransientRepository; + +/** + * First hop example. Logs in to a content repository and prints a + * status message. + */ +public class FirstHop { + + /** + * The main entry point of the example application. + * + * @param args command line arguments (ignored) + * @throws Exception if an error occurs + */ + public static void main(String[] args) throws Exception { + Repository repository = new TransientRepository(); + Session session = repository.login(); + try { + String user = session.getUserID(); + String name = repository.getDescriptor(Repository.REP_NAME_DESC); + System.out.println( + "Logged in as " + user + " to a " + name + " repository."); + } finally { + session.logout(); + } + } + +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/SecondHop.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/SecondHop.java new file mode 100644 index 000000000..6d2bd9f08 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/SecondHop.java @@ -0,0 +1,44 @@ +import javax.jcr.Repository; +import javax.jcr.Session; +import javax.jcr.SimpleCredentials; +import javax.jcr.Node; +import org.apache.jackrabbit.core.TransientRepository; + +/** + * Second hop example. Stores, retrieves, and removes example content. + */ +public class SecondHop { + + /** + * The main entry point of the example application. + * + * @param args command line arguments (ignored) + * @throws Exception if an error occurs + */ + public static void main(String[] args) throws Exception { + Repository repository = new TransientRepository(); + Session session = repository.login( + new SimpleCredentials("username", "password".toCharArray())); + try { + Node root = session.getRootNode(); + + // Store content + Node hello = root.addNode("hello"); + Node world = hello.addNode("world"); + world.setProperty("message", "Hello, World!"); + session.save(); + + // Retrieve content + Node node = root.getNode("hello/world"); + System.out.println(node.getPath()); + System.out.println(node.getProperty("message").getString()); + + // Remove content + root.getNode("hello").remove(); + session.save(); + } finally { + session.logout(); + } + } + +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/ThirdHop.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/ThirdHop.java new file mode 100644 index 000000000..6325c6ad2 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/ThirdHop.java @@ -0,0 +1,79 @@ +import javax.jcr.*; +import org.apache.jackrabbit.core.TransientRepository; +import java.io.FileInputStream; + +/** + * Third Jackrabbit example application. Imports an example XML file + * and outputs the contents of the entire workspace. + */ +public class ThirdHop { + + /** Runs the ThirdHop example. */ + public static void main(String[] args) throws Exception { + // Set up a Jackrabbit repository with the specified + // configuration file and repository directory + Repository repository = new TransientRepository(); + + // Login to the default workspace as a dummy user + Session session = repository.login( + new SimpleCredentials("username", "password".toCharArray())); + try { + // Use the root node as a starting point + Node root = session.getRootNode(); + + // Import the XML file unless already imported + if (!root.hasNode("importxml")) { + System.out.print("Importing xml... "); + // Create an unstructured node under which to import the XML + Node node = root.addNode("importxml", "nt:unstructured"); + // Import the file "test.xml" under the created node + FileInputStream xml = new FileInputStream("test.xml"); + session.importXML( + "/importxml", xml, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW); + xml.close(); + // Save the changes to the repository + session.save(); + System.out.println("done."); + } + + dump(root); + } finally { + session.logout(); + } + } + + /** Recursively outputs the contents of the given node. */ + private static void dump(Node node) throws RepositoryException { + // First output the node path + System.out.println(node.getPath()); + // Skip the virtual (and large!) jcr:system subtree + if (node.getName().equals("jcr:system")) { + return; + } + + // Then output the properties + PropertyIterator properties = node.getProperties(); + while (properties.hasNext()) { + Property property = properties.nextProperty(); + if (property.getDefinition().isMultiple()) { + // A multi-valued property, print all values + Value[] values = property.getValues(); + for (int i = 0; i < values.length; i++) { + System.out.println( + property.getPath() + " = " + values[i].getString()); + } + } else { + // A single-valued property + System.out.println( + property.getPath() + " = " + property.getString()); + } + } + + // Finally output all the child nodes recursively + NodeIterator nodes = node.getNodes(); + while (nodes.hasNext()) { + dump(nodes.nextNode()); + } + } + +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/Base.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/Base.java new file mode 100644 index 000000000..1ae0094fc --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/Base.java @@ -0,0 +1,24 @@ +package jcr; + +import org.apache.jackrabbit.core.TransientRepository; + +import javax.jcr.*; +import java.io.IOException; + +public abstract class Base { + public Repository getRepository() throws IOException { + return new TransientRepository(); + } + + public Session getReadonlySession(Repository repository) throws RepositoryException { + return repository.login(); + } + + public Session getSession(Repository repository) throws RepositoryException { + return repository.login(new SimpleCredentials("username", "password".toCharArray())); + } + + public void logout(Session session) { + session.logout(); + } +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/CommandLineQuery.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/CommandLineQuery.java new file mode 100644 index 000000000..34077f2e1 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/CommandLineQuery.java @@ -0,0 +1,70 @@ +package jcr; + +import javax.jcr.*; +import javax.jcr.nodetype.PropertyDefinition; +import javax.jcr.query.QueryManager; +import javax.jcr.query.Query; +import javax.jcr.query.QueryResult; +import java.io.IOException; +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class CommandLineQuery extends Base { + public CommandLineQuery() { + } + + public static void main(String[] args) throws IOException, RepositoryException { + CommandLineQuery clq=new CommandLineQuery(); + clq.run(); + } + + private void run() throws IOException, RepositoryException { + Repository repository=getRepository(); + Session session=getReadonlySession(repository); + Workspace workspace=session.getWorkspace(); + QueryManager qm=workspace.getQueryManager(); + BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); + for(;;) { + System.out.print("JCRQL> "); + String queryString=reader.readLine(); + if(queryString.equals("quit")) { + break; + } + if(queryString.length()==0 || queryString.startsWith("#")) { + continue; + } + + int resultCounter=0; + try { + Query query=qm.createQuery(queryString, Query.XPATH); + QueryResult queryResult=query.execute(); + NodeIterator nodeIterator=queryResult.getNodes(); + while(nodeIterator.hasNext()) { + Node node=nodeIterator.nextNode(); + dump(node); + resultCounter++; + } + } catch(Exception e) { + e.printStackTrace(); + } + + System.out.println("result count: "+resultCounter); + } + logout(session); + } + + private void dump(Node node) throws RepositoryException { + StringBuilder sb=new StringBuilder(); + String sep=","; + sb.append(node.getName()); + sb.append("["+node.getPath()); + PropertyIterator propIterator=node.getProperties(); + while(propIterator.hasNext()) { + Property prop=propIterator.nextProperty(); + sb.append(sep); + sb.append("@"+prop.getName()+"=\""+prop.getString()+"\""); + } + sb.append("]"); + System.out.println(sb.toString()); + } +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/ReadData.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/ReadData.java new file mode 100644 index 000000000..7c8164e0e --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/ReadData.java @@ -0,0 +1,37 @@ +package jcr; + +import javax.jcr.*; +import java.io.IOException; + +public class ReadData extends Base { + public ReadData() { + } + + public static void main(String[] args) throws IOException, RepositoryException { + ReadData readdata = new ReadData(); + readdata.run(); + } + + private void run() throws IOException, RepositoryException { + Repository repository = getRepository(); + + Session session = getSession(repository); + + Node rootnode = session.getRootNode(); + + Node childnode = null; + try { + childnode = rootnode.getNode("foo"); + try { + Property prop = childnode.getProperty("bar"); + System.out.println("value of /foo@bar: " + prop.getString()); + } catch (PathNotFoundException pnfe) { + System.out.println("/foo@bar not found."); + } + } catch (PathNotFoundException pnfe) { + System.out.println("/foo not found."); + } + + logout(session); + } +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/RemoveData.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/RemoveData.java new file mode 100644 index 000000000..22ec8e3e6 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/RemoveData.java @@ -0,0 +1,33 @@ +package jcr; + +import javax.jcr.*; +import java.io.IOException; + +public class RemoveData extends Base { + public RemoveData() { + } + + public static void main(String[] args) throws IOException, RepositoryException { + RemoveData sd = new RemoveData(); + sd.run(); + } + + private void run() throws IOException, RepositoryException { + Repository repository = getRepository(); + + Session session = getSession(repository); + + Node rootnode = session.getRootNode(); + + Node childnode = null; + try { + childnode = rootnode.getNode("foo"); + childnode.remove(); + session.save(); + } catch (PathNotFoundException pnfe) { + System.out.println("/foo not found; not removed."); + } + + logout(session); + } +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/StoreData.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/StoreData.java new file mode 100644 index 000000000..04b2b4608 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/jcr/StoreData.java @@ -0,0 +1,33 @@ +package jcr; + +import javax.jcr.*; +import java.io.IOException; + +public class StoreData extends Base { + public StoreData() { + } + + public static void main(String[] args) throws IOException, RepositoryException { + StoreData sd=new StoreData(); + sd.run(); + } + + private void run() throws IOException, RepositoryException { + Repository repository=getRepository(); + + Session session=getSession(repository); + + Node rootnode=session.getRootNode(); + + Node childnode=null; + try { + childnode=rootnode.getNode("foo"); + } catch(PathNotFoundException pnfe) { + childnode=rootnode.addNode("foo"); + childnode.setProperty("bar", "this is some data"); + session.save(); + } + + logout(session); + } +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java new file mode 100644 index 000000000..6ef840b88 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/java/webdav/WebDavTest.java @@ -0,0 +1,46 @@ +package webdav; + +import org.apache.commons.httpclient.Credentials; +import org.apache.commons.httpclient.HostConfiguration; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpConnectionManager; +import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; +import org.apache.commons.httpclient.UsernamePasswordCredentials; +import org.apache.commons.httpclient.auth.AuthScope; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.apache.jackrabbit.webdav.client.methods.PutMethod; + +public class WebDavTest { + + /** + * @param args + */ + public static void main(String[] args) { + try { + HostConfiguration hostConfig = new HostConfiguration(); + hostConfig.setHost("localhost", 8082); + // hostConfig. + HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); + HttpConnectionManagerParams params = new HttpConnectionManagerParams(); + int maxHostConnections = 20; + params.setMaxConnectionsPerHost(hostConfig, maxHostConnections); + connectionManager.setParams(params); + HttpClient client = new HttpClient(connectionManager); + Credentials creds = new UsernamePasswordCredentials("scanner1", + "scanner1"); + client.getState().setCredentials(AuthScope.ANY, creds); + client.setHostConfiguration(hostConfig); + // return client; + + PutMethod pm = new PutMethod( + "http://localhost:8082/webdav/scanner1_queque/uploader/image_" + + ".txt"); + String text = "this is the document content"; + pm.setRequestBody(text); + client.executeMethod(pm); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties new file mode 100644 index 000000000..defd189bf --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +# ***** Set root logger level to DEBUG and its only appender to A. +log4j.rootLogger=WARN, A + +# ***** A is set to be a ConsoleAppender. +log4j.appender.A=org.apache.log4j.ConsoleAppender +# ***** A uses PatternLayout. +log4j.appender.A.layout=org.apache.log4j.PatternLayout +log4j.appender.A.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n diff --git a/sandbox/runtime/org.argeo.sandbox.jackrabbit/test.xml b/sandbox/runtime/org.argeo.sandbox.jackrabbit/test.xml new file mode 100644 index 000000000..9cbb155e6 --- /dev/null +++ b/sandbox/runtime/org.argeo.sandbox.jackrabbit/test.xml @@ -0,0 +1,52 @@ + + + Three Namespaces + + + An Ellipse and a Rectangle + + + + + The equation for ellipses + + + + 1 + + + + + + + x + 2 + + + + a + 2 + + + + + + + y + 2 + + + + b + 2 + + + + + + + Last Modified January 10, 2002 + + diff --git a/sandbox/runtime/pom.xml b/sandbox/runtime/pom.xml new file mode 100644 index 000000000..6a4d04ede --- /dev/null +++ b/sandbox/runtime/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + org.argeo.commons + 0.1.2-SNAPSHOT + sandbox + .. + + org.argeo.commons.sandbox + runtime + Commons Sandbox Runtime + pom + + org.argeo.sandbox.jackrabbit + + \ No newline at end of file -- 2.30.2