4 //import java.util.Enumeration;
5 //import java.util.Vector;
6 import java.rmi.RemoteException;
9 import com.db4o.Db4oEmbedded;
10 import com.db4o.ObjectContainer;
11 import com.db4o.ObjectSet;
12 import com.db4o.config.EmbeddedConfiguration;
13 import com.db4o.cs.Db4oClientServer;
14 import com.db4o.cs.config.ClientConfiguration;
15 import com.db4o.query.Predicate;
17 import configuration.ConfigXML;
18 import domain.Account;
19 import domain.Booking;
20 import domain.HouseFeatures;
22 //import dataModel.Offer;
24 import domain.RuralHouse;
25 import exceptions.OfferCanNotBeBooked;
26 import exceptions.OverlappingOfferExists;
28 public class DB4oManager {
30 private static ObjectContainer db;
31 private static EmbeddedConfiguration configuration;
32 private static ClientConfiguration configurationCS;
33 private int bookingNumber = 0; // if it is "static" then it is not
35 private int offerNumber = 0; // if it is "static" then it is not serialized
36 private static DB4oManager theDB4oManager = null;
38 private static DB4oManagerAux theDB4oManagerAux;
42 private DB4oManager() throws Exception {
43 theDB4oManagerAux = new DB4oManagerAux(0, 0);
44 c = ConfigXML.getInstance();
45 System.out.println("Creating DB4oManager instance => isDatabaseLocal: "
46 + c.isDatabaseLocal() + " getDatabBaseOpenMode: "
47 + c.getDataBaseOpenMode());
49 if ((c.getDataBaseOpenMode().equals("initialize"))
50 && (c.isDatabaseLocal()))
51 new File(c.getDb4oFilename()).delete();
53 if (c.isDatabaseLocal()) {
55 System.out.println("DataBase opened");
56 } else // c.isDatabaseLocal==false
59 System.out.println("Remote DataBase opened");
61 if (c.getDataBaseOpenMode().equals("initialize")) {
63 System.out.println("DataBase initialized");
64 } else // c.getDataBaseOpenMode().equals("open")
67 ObjectSet res = db.queryByExample(DB4oManagerAux.class);
68 ListIterator listIter = res.listIterator();
69 if (listIter.hasNext())
70 theDB4oManagerAux = (DB4oManagerAux) res.next();
74 private static void openDB() {
75 configuration = Db4oEmbedded.newConfiguration();
76 configuration.common().activationDepth(c.getActivationDepth());
77 configuration.common().updateDepth(c.getUpdateDepth());
78 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
79 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
82 private void openSDB() {
84 configurationCS = Db4oClientServer.newClientConfiguration();
85 configurationCS.common().activationDepth(c.getActivationDepth());
86 configurationCS.common().updateDepth(c.getUpdateDepth());
87 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
88 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
89 c.getDatabasePort(), c.getUser(), c.getPassword());
93 class DB4oManagerAux {
97 DB4oManagerAux(int bookingNumber, int offerNumber) {
98 this.bookingNumber = bookingNumber;
99 this.offerNumber = offerNumber;
103 public static DB4oManager getInstance() throws Exception {
104 if (theDB4oManager == null)
105 theDB4oManager = new DB4oManager();
106 return theDB4oManager;
109 public void initializeDB() {
112 Owner jon = new Owner("Jon");
113 Owner alfredo = new Owner("Alfredo");
114 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
116 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
118 jon.setBankAccount("1349 5677 21 2133567777");
119 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
122 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
123 alfredo.setBankAccount("4144 0087 23 9700002133");
124 Account jonAcc = new Account("userJon", "passJon", jon);
125 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
128 db.store(alfredoAcc);
135 public void deleteDB() {
137 if (c.isDatabaseLocal() == false)
143 Owner proto = new Owner(null, null);
144 ObjectSet result = db.queryByExample(proto);
145 Vector<Owner> owners = new Vector<Owner>();
146 while (result.hasNext()) {
147 Owner o = (Owner) result.next();
148 System.out.println("Deleted owner: " + o.toString());
157 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
158 Date lastDay, float price) throws RemoteException, Exception {
161 if (c.isDatabaseLocal() == false)
168 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
170 ObjectSet<RuralHouse> result = db.queryByExample(proto);
171 RuralHouse rh = (RuralHouse) result.next();
172 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
174 db.store(theDB4oManagerAux); // To store the new value for
179 } catch (com.db4o.ext.ObjectNotStorableException e) {
181 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
189 public void deleteOffer(Offer offer) throws RemoteException,
191 if (c.isDatabaseLocal() == false)
197 ObjectSet<Offer> of = db.queryByExample(offer);
198 RuralHouse rh =of.get(0).getRuralHouse();
199 System.out.println(rh.offers.remove(of.get(0)));
203 } catch (com.db4o.ext.ObjectNotStorableException e) {
205 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
212 * This method creates a book with a corresponding parameters
215 * day, last day, house number and telephone
218 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
219 Date lastDate, String bookTelephoneNumber)
220 throws OfferCanNotBeBooked {
222 if (c.isDatabaseLocal() == false)
231 if (c.isDatabaseLocal() == false)
234 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
235 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
236 ObjectSet result = db.queryByExample(proto);
237 RuralHouse rh = (RuralHouse) result.next();
240 offer = rh.findOffer(firstDate, lastDate);
243 offer.createBooking(theDB4oManagerAux.bookingNumber++,
244 bookTelephoneNumber);
245 db.store(theDB4oManagerAux); // To store the new value for
249 bok = offer.getBooking();
252 } catch (com.db4o.ext.ObjectNotStorableException e) {
254 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
255 } catch (Exception exc) {
256 exc.printStackTrace();
264 * This method existing owners
267 public Vector<Owner> getOwners() throws RemoteException, Exception {
269 if (c.isDatabaseLocal() == false)
275 Owner proto = new Owner(null, null);
276 ObjectSet<Owner> result = db.queryByExample(proto);
277 Vector<Owner> owners = new Vector<Owner>();
278 while (result.hasNext())
279 owners.add((Owner) result.next());
286 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
289 if (c.isDatabaseLocal() == false)
295 RuralHouse proto = new RuralHouse(null, null, null, null, null);
296 ObjectSet result = db.queryByExample(proto);
297 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
298 while (result.hasNext())
299 ruralHouses.add((RuralHouse) result.next());
306 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
307 Date lastDay) throws RemoteException, OverlappingOfferExists {
309 if (c.isDatabaseLocal() == false)
316 RuralHouse rhn = (RuralHouse) db.queryByExample(
317 new RuralHouse(rh.getHouseName(), null, null, null, null))
319 if (rhn.overlapsWith(firstDay, lastDay) != null)
320 throw new OverlappingOfferExists();
328 public static ObjectContainer getContainer() {
332 public void close() {
334 System.out.println("DataBase closed");
337 public String toString() {
338 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
345 * @throws RemoteException
348 public Vector<Account> getAccount(String usr, String pwd)
349 throws RemoteException, Exception {
351 if (c.isDatabaseLocal() == false)
357 Account proto = new Account(usr, pwd, new Owner(null, null));
358 ObjectSet<Account> result = db.queryByExample(proto);
359 Vector<Account> accounts = new Vector<Account>();
360 while (result.hasNext())
361 accounts.add((Account) result.next());
371 public boolean storeRuralHouses(RuralHouse rh) {
373 if (c.isDatabaseLocal() == false)
378 boolean stored = false;
379 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
382 ObjectSet<Owner> result = db.queryByExample(house);
383 if (result.isEmpty()) {
388 db.delete(result.get(0));
399 public void removeHouse(RuralHouse rh, Owner owner) {
401 if (c.isDatabaseLocal() == false)
406 ObjectSet<Owner> result = db.queryByExample(owner);
407 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
408 if (!rhs.isEmpty()) {
409 Owner found = result.get(0);
410 found.getRuralHouses().remove(rhs.get(0));
414 } catch (Exception exc) {
415 exc.printStackTrace();
423 public Vector<RuralHouse> getRuralHouses(String name, String town,
424 int nBed, int nKit, int nBath, int nPark, int nLiv) {
425 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
426 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
427 if (c.isDatabaseLocal() == false)
433 ObjectSet<RuralHouse> result = db.queryByExample(rh);
434 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
435 while (result.hasNext())
436 ruralHouses.add(result.next());
439 } catch (NullPointerException e) {