#21 - Java binding sample
authorVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 3 Apr 2013 07:48:39 +0000 (14:48 +0700)
committerVyacheslav Tyutyunkov <tyutyunkov@gmail.com>
Wed, 3 Apr 2013 07:48:39 +0000 (14:48 +0700)
jejdb/jejdb.iml
jejdb/samples/sample1/build.properties [new file with mode: 0644]
jejdb/samples/sample1/build.xml [new file with mode: 0644]
jejdb/samples/sample1/src/org/ejdb/sample1/Main.java [new file with mode: 0644]

index b9f7c0f..093870a 100644 (file)
@@ -5,6 +5,7 @@
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/samples/sample1/src" isTestSource="false" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
diff --git a/jejdb/samples/sample1/build.properties b/jejdb/samples/sample1/build.properties
new file mode 100644 (file)
index 0000000..7fae4e3
--- /dev/null
@@ -0,0 +1,13 @@
+build.dir=${basedir}/build
+source.dir=${basedir}/src
+
+jejdb.dir=${basedir}/../../target
+
+## General build options ##
+
+javac.debug=true
+javac.optimize=false
+javac.source=1.6
+javac.target=1.6
+javac.encoding=UTF-8
+
diff --git a/jejdb/samples/sample1/build.xml b/jejdb/samples/sample1/build.xml
new file mode 100644 (file)
index 0000000..84c411c
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="jejdb-sample-one" default="run">
+
+    <property file="build.properties"/>
+
+    <target name="init">
+        <available file="${jejdb.dir}" property="jejdb.target.available"/>
+        <fail message="Please build JEJDB library first" unless="jejdb.target.available"/>
+
+        <path id="lib.jejdb.classpath">
+            <fileset id="lib.jejdb.fileset" dir="${jejdb.dir}">
+                <include name="jejdb-*.jar"/>
+            </fileset>
+        </path>
+    </target>
+
+    <target name="build" depends="init" description="Build JEJDB sample">
+        <mkdir dir="${build.dir}/classes"/>
+        <javac destdir="${build.dir}/classes"
+               target="${javac.target}"
+               source="${javac.source}"
+               debug="${javac.debug}"
+               optimize="${javac.optimize}"
+               encoding="${javac.encoding}"
+               includeantruntime="false">
+            <src path="${source.dir}"/>
+            <classpath>
+                <path refid="lib.jejdb.classpath"/>
+            </classpath>
+        </javac>
+        <path id="jejdb.sample-one.classpath" location="${build.dir}/classes"/>
+
+        <manifestclasspath property="jar.lib.jejdb.classpath" jarfile="${basedir}/jejdb-sample1.jar">
+            <classpath>
+                <path refid="lib.jejdb.classpath"/>
+            </classpath>
+        </manifestclasspath>
+
+        <jar destfile="${basedir}/jejdb-sample1.jar" basedir="${build.dir}/classes">
+            <manifest>
+                <attribute name="Main-Class" value="org.ejdb.sample1.Main"/>
+                <attribute name="Class-Path" value="${jar.lib.jejdb.classpath}"/>
+            </manifest>
+        </jar>
+
+        <echo message="Use 'java -jar jejdb-sample1.jar' to run sample"/>
+        <echo message="Ensure that LD_LIBRARY_PATH environment variable contains path to 'libjejdb'"/>
+    </target>
+
+    <target name="run" depends="build" description="Build JEJDB sample and run it">
+        <java jar="${basedir}/jejdb-sample1.jar" fork="true" dir="${build.dir}">
+            <env key="LD_LIBRARY_PATH" path="${jejdb.dir}/.."/>
+        </java>
+    </target>
+
+    <target name="clean">
+        <delete dir="${build.dir}"/>
+    </target>
+</project>
\ No newline at end of file
diff --git a/jejdb/samples/sample1/src/org/ejdb/sample1/Main.java b/jejdb/samples/sample1/src/org/ejdb/sample1/Main.java
new file mode 100644 (file)
index 0000000..4df1567
--- /dev/null
@@ -0,0 +1,101 @@
+package org.ejdb.sample1;
+
+import org.ejdb.bson.BSONObject;
+import org.ejdb.driver.EJDB;
+import org.ejdb.driver.EJDBCollection;
+import org.ejdb.driver.EJDBQueryBuilder;
+import org.ejdb.driver.EJDBResultSet;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @author Tyutyunkov Vyacheslav (tve@softmotions.com)
+ * @version $Id$
+ */
+public class Main {
+
+    public static void main(String[] args) {
+        EJDB ejdb = new EJDB();
+
+        try {
+            // Used modes:
+            //  - read
+            //  - write
+            //  - create db if not exists
+            //  - truncate existing db
+            ejdb.open("zoo", EJDB.JBOREADER | EJDB.JBOWRITER | EJDB.JBOCREAT | EJDB.JBOTRUNC);
+
+            BSONObject parrot1 = new BSONObject("name", "Grenny")
+                    .append("type", "African Grey")
+                    .append("male", true)
+                    .append("age", 1)
+                    .append("birthhdate", new Date())
+                    .append("likes", new String[]{"green color", "night", "toys"})
+                    .append("extra1", null);
+
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(2013, 1, 1, 0, 0, 1);
+
+            BSONObject parrot2 = new BSONObject();
+            parrot2.put("name", "Bounty");
+            parrot2.put("type", "Cockatoo");
+            parrot2.put("male", false);
+            parrot2.put("age", 15);
+            parrot2.put("birthdate", calendar.getTime());
+            parrot2.put("likes", new String[]{"sugar cane"});
+            parrot2.put("extra1", null);
+
+            System.out.println("parrot1 =\n\t\t" + parrot1);
+            System.out.println("parrot2 =\n\t\t" + parrot2);
+
+            EJDBCollection parrots = ejdb.getCollection("parrots");
+
+            // saving
+            parrots.save(parrot1);
+            parrots.save(parrot2);
+
+            EJDBQueryBuilder qb;
+            EJDBResultSet rs;
+
+            // Below two equivalent queries:
+            // Q1
+            qb = new EJDBQueryBuilder();
+            qb.field("likes", "toys")
+                    .orderBy().asc("name").desc("age");
+
+            rs = parrots.createQuery(qb).find();
+            System.out.println();
+            System.out.println("Results (Q1): " + rs.length());
+            for (BSONObject r : rs) {
+                System.out.println("\t" + r);
+            }
+            rs.close();
+
+            // Q2
+            qb = new EJDBQueryBuilder();
+            qb.field("likes").eq("toys")
+                    .orderBy().add("name", true).add("age", false);
+
+            rs = parrots.createQuery(qb).find();
+            System.out.println();
+            System.out.println("Results (Q2): " + rs.length());
+            for (BSONObject r : rs) {
+                System.out.println("\t" + r);
+            }
+
+            // Second way to iterate
+            System.out.println();
+            System.out.println("Results (Q2): " + rs.length());
+            for (int i = 0; i < rs.length(); ++i) {
+                System.out.println("\t" + i + " => " + rs.get(i));
+            }
+
+            rs.close();
+        } finally {
+            if (ejdb.isOpen()) {
+                ejdb.close();
+            }
+        }
+    }
+}