package org.springmodules.db4o.examples.chapter1;
import java.util.Iterator;
import org.springmodules.db4o.examples.Pilot;
import org.springframework.context.support.AbstractApplicationContext;
import com.db4o.ObjectContainer;
import com.db4o.ObjectSet;
import com.db4o.query.Constraint;
import com.db4o.query.Query;
/**
* This class corresponds with the class <code>QueryExample</code> from the
* Db4o tutorial.
*
* @author Daniel Mitterdorfer
* @since 07.12.2005
*
*/
public class QueryExample {
private static void listResult(ObjectSet result) {
for (Iterator it = result.iterator(); it.hasNext();) {
Pilot pilot = (Pilot) it.next();
System.out.println(pilot.toString());
}
}
public static void storeFirstPilot(ObjectContainer db) {
Pilot pilot1 = new Pilot("Michael Schumacher", 100);
db.set(pilot1);
System.out.println("Stored " + pilot1);
}
public static void storeSecondPilot(ObjectContainer db) {
Pilot pilot2 = new Pilot("Rubens Barrichello", 99);
db.set(pilot2);
System.out.println("Stored " + pilot2);
}
public static void retrieveAllPilots(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
ObjectSet result = query.execute();
listResult(result);
}
public static void retrievePilotByName(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
query.descend("name").constrain("Michael Schumacher");
ObjectSet result = query.execute();
listResult(result);
}
public static void retrievePilotByExactPoints(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
query.descend("points").constrain(new Integer(100));
ObjectSet result = query.execute();
listResult(result);
}
public static void retrieveByNegation(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
query.descend("name").constrain("Michael Schumacher").not();
ObjectSet result = query.execute();
listResult(result);
}
public static void retrieveByConjunction(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
Constraint constr = query.descend("name").constrain("Michael Schumacher");
query.descend("points").constrain(new Integer(99)).and(constr);
ObjectSet result = query.execute();
listResult(result);
}
public static void retrieveByDisjunction(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
Constraint constr = query.descend("name").constrain("Michael Schumacher");
query.descend("points").constrain(new Integer(99)).or(constr);
ObjectSet result = query.execute();
listResult(result);
}
public static void retrieveByComparison(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
query.descend("points").constrain(new Integer(99)).greater();
ObjectSet result = query.execute();
listResult(result);
}
public static void retrieveByDefaultFieldValue(ObjectContainer db) {
Pilot somebody = new Pilot("Somebody else", 0);
db.set(somebody);
Query query = db.query();
query.constrain(Pilot.class);
query.descend("points").constrain(new Integer(0));
ObjectSet result = query.execute();
listResult(result);
db.delete(somebody);
}
public static void retrieveSorted(ObjectContainer db) {
Query query = db.query();
query.constrain(Pilot.class);
query.descend("name").orderAscending();
ObjectSet result = query.execute();
listResult(result);
query.descend("name").orderDescending();
result = query.execute();
listResult(result);
}
public static void clearDatabase(ObjectContainer db) {
ObjectSet result = db.get(new Pilot(null, 0));
while (result.hasNext()) {
db.delete(result.next());
}
}
/**
* @param args
* Command line arguments. This appliation does not check any of
* these arguments.
*/
public static void main(String[] args) {
AbstractApplicationContext ctx = ExampleUtils.getContext();
ObjectContainer db = (ObjectContainer) ctx.getBean(ExampleUtils.CONTAINER_BEAN_ID);
try {
storeFirstPilot(db);
storeSecondPilot(db);
retrieveAllPilots(db);
retrievePilotByName(db);
retrievePilotByExactPoints(db);
retrieveByNegation(db);
retrieveByConjunction(db);
retrieveByDisjunction(db);
retrieveByComparison(db);
retrieveByDefaultFieldValue(db);
retrieveSorted(db);
clearDatabase(db);
} finally {
ctx.close();
}
}
}