KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4odoc > callbacks > CallbacksExample


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com */
2
3 package com.db4odoc.callbacks;
4
5 import java.io.File JavaDoc;
6
7 import com.db4o.Db4o;
8 import com.db4o.ObjectContainer;
9 import com.db4o.ObjectSet;
10 import com.db4o.events.CancellableObjectEventArgs;
11 import com.db4o.events.Event4;
12 import com.db4o.events.EventArgs;
13 import com.db4o.events.EventListener4;
14 import com.db4o.events.EventRegistry;
15 import com.db4o.events.EventRegistryFactory;
16 import com.db4o.events.ObjectEventArgs;
17 import com.db4o.query.Query;
18
19
20 public class CallbacksExample {
21
22     private final static String JavaDoc YAPFILENAME="formula1.yap";
23     
24     public static void main(String JavaDoc[] args) {
25         testCreated();
26         testCascadedDelete();
27         testIntegrityCheck();
28     }
29     // end main
30

31     public static void testCreated(){
32         new File JavaDoc(YAPFILENAME).delete();
33         ObjectContainer db = Db4o.openFile(YAPFILENAME);
34         try {
35             EventRegistry registry = EventRegistryFactory.forObjectContainer(db);
36             // register an event handler, which will print all the car objects, that have been created
37
registry.created().addListener(new EventListener4() {
38                 public void onEvent(Event4 e, EventArgs args) {
39                     ObjectEventArgs queryArgs = ((ObjectEventArgs) args);
40                     Object JavaDoc obj = queryArgs.object();
41                     if (obj instanceof Pilot){
42                         System.out.println(obj.toString());
43                     }
44                 }
45             });
46
47             Car car = new Car("BMW",new Pilot("Rubens Barrichello"));
48             db.set(car);
49         } finally {
50             db.close();
51         }
52     }
53     // end testCreated
54

55     public static void fillDB(){
56         new File JavaDoc(YAPFILENAME).delete();
57         ObjectContainer db = Db4o.openFile(YAPFILENAME);
58         try {
59             Car car = new Car("BMW",new Pilot("Rubens Barrichello"));
60             db.set(car);
61             car = new Car("Ferrari",new Pilot("Finn Kimi Raikkonen"));
62             db.set(car);
63         } finally {
64             db.close();
65         }
66     }
67     // end fillDB
68

69     public static void testCascadedDelete(){
70         fillDB();
71         final ObjectContainer db = Db4o.openFile(YAPFILENAME);
72         try {
73             // check the contents of the database
74
ObjectSet result = db.get(null);
75             listResult(result);
76             
77             EventRegistry registry = EventRegistryFactory.forObjectContainer(db);
78             // register an event handler, which will delete the pilot when his car is deleted
79
registry.deleted().addListener(new EventListener4() {
80                 public void onEvent(Event4 e, EventArgs args) {
81                     ObjectEventArgs queryArgs = ((ObjectEventArgs) args);
82                     Object JavaDoc obj = queryArgs.object();
83                     if (obj instanceof Car){
84                         db.delete(((Car)obj).getPilot());
85                     }
86                 }
87             });
88             // delete all the cars
89
result = db.query(Car.class);
90             while(result.hasNext()) {
91                 db.delete(result.next());
92             }
93             // check if the database is empty
94
result = db.get(null);
95             listResult(result);
96         } finally {
97             db.close();
98         }
99     }
100     // end testCascadedDelete
101

102     public static void testIntegrityCheck(){
103         fillDB();
104         final ObjectContainer db = Db4o.openFile(YAPFILENAME);
105         try {
106             EventRegistry registry = EventRegistryFactory.forObjectContainer(db);
107             // register an event handler, which will stop deleting a pilot when it is referenced from a car
108
registry.deleting().addListener(new EventListener4() {
109                 public void onEvent(Event4 e, EventArgs args) {
110                     CancellableObjectEventArgs cancellableArgs = ((CancellableObjectEventArgs) args);
111                     Object JavaDoc obj = cancellableArgs.object();
112                     if (obj instanceof Pilot){
113                         Query q = db.query();
114                         q.constrain(Car.class);
115                         q.descend("pilot").constrain(obj);
116                         ObjectSet result = q.execute();
117                         if (result.size() > 0) {
118                             System.out.println("Object " + (Pilot)obj + " can't be deleted as object container has references to it");
119                             cancellableArgs.cancel();
120                         }
121                     }
122                 }
123             });
124             
125             // check the contents of the database
126
ObjectSet result = db.get(null);
127             listResult(result);
128             
129             // try to delete all the pilots
130
result = db.query(Pilot.class);
131             while(result.hasNext()) {
132                 db.delete(result.next());
133             }
134             // check if any of the objects were deleted
135
result = db.get(null);
136             listResult(result);
137         } finally {
138             db.close();
139         }
140     }
141     // end testIntegrityCheck
142

143     public static void listResult(ObjectSet result) {
144         System.out.println(result.size());
145         while(result.hasNext()) {
146             System.out.println(result.next());
147         }
148     }
149     // end listResult
150
}
151
Popular Tags