Introduce Jackrabbit sandbox
[lgpl/argeo-commons.git] / sandbox / runtime / org.argeo.sandbox.jackrabbit / src / main / java / jcr / CommandLineQuery.java
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 (file)
index 0000000..34077f2
--- /dev/null
@@ -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());
+    }
+}