1 package com.db4o.f1.chapter3; 2 3 import java.io.*; 4 import java.util.*; 5 import com.db4o.*; 6 import com.db4o.f1.*; 7 import com.db4o.query.*; 8 9 10 public class CollectionsExample extends Util { 11 public static void main(String [] args) { 12 new File(Util.YAPFILENAME).delete(); 13 ObjectContainer db=Db4o.openFile(Util.YAPFILENAME); 14 try { 15 storeFirstCar(db); 16 storeSecondCar(db); 17 retrieveAllSensorReadout(db); 18 retrieveSensorReadoutQBE(db); 19 retrieveCarQBE(db); 20 retrieveCollections(db); 21 retrieveArrays(db); 22 retrieveAllSensorReadoutNative(db); 23 retrieveSensorReadoutNative(db); 24 retrieveCarNative(db); 25 retrieveSensorReadoutQuery(db); 26 retrieveCarQuery(db); 27 db.close(); 28 updateCarPart1(); 29 db=Db4o.openFile(Util.YAPFILENAME); 30 updateCarPart2(db); 31 updateCollection(db); 32 db.close(); 33 deleteAllPart1(); 34 db=Db4o.openFile(Util.YAPFILENAME); 35 deleteAllPart2(db); 36 } 37 finally { 38 db.close(); 39 } 40 } 41 42 public static void storeFirstCar(ObjectContainer db) { 43 Car car1=new Car("Ferrari"); 44 Pilot pilot1=new Pilot("Michael Schumacher",100); 45 car1.setPilot(pilot1); 46 db.set(car1); 47 } 48 49 public static void storeSecondCar(ObjectContainer db) { 50 Pilot pilot2=new Pilot("Rubens Barrichello",99); 51 Car car2=new Car("BMW"); 52 car2.setPilot(pilot2); 53 car2.snapshot(); 54 car2.snapshot(); 55 db.set(car2); 56 } 57 58 public static void retrieveAllSensorReadout( 59 ObjectContainer db) { 60 SensorReadout proto=new SensorReadout(null,null,null); 61 ObjectSet results=db.get(proto); 62 listResult(results); 63 } 64 65 public static void retrieveAllSensorReadoutNative( 66 ObjectContainer db) { 67 ObjectSet results = db.query(new Predicate() { 68 public boolean match(SensorReadout candidate){ 69 return true; 70 } 71 }); 72 listResult(results); 73 } 74 75 public static void retrieveSensorReadoutQBE( 76 ObjectContainer db) { 77 SensorReadout proto=new SensorReadout( 78 new double[]{0.3,0.1},null,null); 79 ObjectSet results=db.get(proto); 80 listResult(results); 81 } 82 83 public static void retrieveSensorReadoutNative( 84 ObjectContainer db) { 85 ObjectSet results = db.query(new Predicate() { 86 public boolean match(SensorReadout candidate){ 87 return Arrays.binarySearch(candidate.getValues(), 0.3) >= 0 88 && Arrays.binarySearch(candidate.getValues(), 1.0) >= 0; 89 } 90 }); 91 listResult(results); 92 } 93 94 public static void retrieveCarQBE(ObjectContainer db) { 95 SensorReadout protoreadout=new SensorReadout( 96 new double[]{0.6,0.2},null,null); 97 List protohistory=new ArrayList(); 98 protohistory.add(protoreadout); 99 Car protocar=new Car(null,protohistory); 100 ObjectSet result=db.get(protocar); 101 listResult(result); 102 } 103 104 public static void retrieveCarNative( 105 ObjectContainer db) { 106 ObjectSet results = db.query(new Predicate() { 107 public boolean match(Car candidate){ 108 List history = candidate.getHistory(); 109 for(int i = 0; i < history.size(); i++){ 110 SensorReadout readout = (SensorReadout)history.get(i); 111 if( Arrays.binarySearch(readout.getValues(), 0.6) >= 0 || 112 Arrays.binarySearch(readout.getValues(), 0.2) >= 0) 113 return true; 114 } 115 return false; 116 } 117 }); 118 listResult(results); 119 } 120 121 public static void retrieveCollections(ObjectContainer db) { 122 ObjectSet result=db.get(new ArrayList()); 123 listResult(result); 124 } 125 126 public static void retrieveArrays(ObjectContainer db) { 127 ObjectSet result=db.get(new double[]{0.6,0.4}); 128 listResult(result); 129 } 130 131 public static void retrieveSensorReadoutQuery( 132 ObjectContainer db) { 133 Query query=db.query(); 134 query.constrain(SensorReadout.class); 135 Query valuequery=query.descend("values"); 136 valuequery.constrain(new Double (0.3)); 137 valuequery.constrain(new Double (0.1)); 138 ObjectSet result=query.execute(); 139 listResult(result); 140 } 141 142 public static void retrieveCarQuery(ObjectContainer db) { 143 Query query=db.query(); 144 query.constrain(Car.class); 145 Query historyquery=query.descend("history"); 146 historyquery.constrain(SensorReadout.class); 147 Query valuequery=historyquery.descend("values"); 148 valuequery.constrain(new Double (0.3)); 149 valuequery.constrain(new Double (0.1)); 150 ObjectSet result=query.execute(); 151 listResult(result); 152 } 153 154 public static void updateCarPart1() { 155 Db4o.configure().objectClass(Car.class).cascadeOnUpdate(true); 156 } 157 158 public static void updateCarPart2(ObjectContainer db) { 159 ObjectSet results = db.query(new Predicate() { 160 public boolean match(Car candidate){ 161 return true; 162 } 163 }); 164 Car car=(Car)results.next(); 165 car.snapshot(); 166 db.set(car); 167 retrieveAllSensorReadoutNative(db); 168 } 169 170 public static void updateCollection(ObjectContainer db) { 171 ObjectSet results = db.query(new Predicate() { 172 public boolean match(Car candidate){ 173 return true; 174 } 175 }); 176 Car car =(Car)results.next(); 177 car.getHistory().remove(0); 178 db.set(car.getHistory()); 179 results = db.query(new Predicate() { 180 public boolean match(Car candidate){ 181 return true; 182 } 183 }); 184 while(results.hasNext()) { 185 car=(Car)results.next(); 186 for (int idx=0;idx<car.getHistory().size();idx++) { 187 System.out.println(car.getHistory().get(idx)); 188 } 189 } 190 } 191 192 public static void deleteAllPart1() { 193 Db4o.configure().objectClass(Car.class) 194 .cascadeOnDelete(true); 195 } 196 197 public static void deleteAllPart2(ObjectContainer db) { 198 ObjectSet cars = db.query(new Predicate() { 199 public boolean match(Car candidate){ 200 return true; 201 } 202 }); 203 while(cars.hasNext()) { 204 db.delete(cars.next()); 205 } 206 ObjectSet readouts = db.query(new Predicate() { 207 public boolean match(SensorReadout candidate){ 208 return true; 209 } 210 }); 211 while(readouts.hasNext()) { 212 db.delete(readouts.next()); 213 } 214 } 215 } 216 | Popular Tags |