4 //import java.util.Enumeration;
5 //import java.util.Vector;
6 import java.rmi.RemoteException;
9 import java.util.ListIterator;
10 import java.util.Vector;
12 import com.db4o.Db4oEmbedded;
13 import com.db4o.ObjectContainer;
14 import com.db4o.ObjectSet;
15 import com.db4o.config.EmbeddedConfiguration;
16 import com.db4o.cs.Db4oClientServer;
17 import com.db4o.cs.config.ClientConfiguration;
18 import com.db4o.query.Predicate;
20 import configuration.ConfigXML;
21 import domain.Account;
22 import domain.Administrator;
23 import domain.Booking;
25 import domain.HouseFeatures;
27 //import dataModel.Offer;
29 import domain.RuralHouse;
30 import exceptions.OfferCanNotBeBooked;
31 import exceptions.OverlappingOfferExists;
33 public class DB4oManager {
35 private static ObjectContainer db;
36 private static EmbeddedConfiguration configuration;
37 private static ClientConfiguration configurationCS;
38 private int bookingNumber = 0; // if it is "static" then it is not
40 private int offerNumber = 0; // if it is "static" then it is not serialized
41 private static DB4oManager theDB4oManager = null;
43 private static DB4oManagerAux theDB4oManagerAux;
47 private DB4oManager() throws Exception {
48 theDB4oManagerAux = new DB4oManagerAux(0, 0);
49 c = ConfigXML.getInstance();
50 System.out.println("Creating DB4oManager instance => isDatabaseLocal: "
51 + c.isDatabaseLocal() + " getDatabBaseOpenMode: "
52 + c.getDataBaseOpenMode());
54 if ((c.getDataBaseOpenMode().equals("initialize"))
55 && (c.isDatabaseLocal()))
56 new File(c.getDb4oFilename()).delete();
58 if (c.isDatabaseLocal()) {
60 System.out.println("DataBase opened");
61 } else // c.isDatabaseLocal==false
64 System.out.println("Remote DataBase opened");
66 if (c.getDataBaseOpenMode().equals("initialize")) {
68 System.out.println("DataBase initialized");
69 } else // c.getDataBaseOpenMode().equals("open")
72 ObjectSet<DB4oManagerAux> res = db
73 .queryByExample(DB4oManagerAux.class);
74 ListIterator<DB4oManagerAux> listIter = res.listIterator();
75 if (listIter.hasNext())
76 theDB4oManagerAux = (DB4oManagerAux) res.next();
80 private static void openDB() {
81 configuration = Db4oEmbedded.newConfiguration();
82 configuration.common().activationDepth(c.getActivationDepth());
83 configuration.common().updateDepth(c.getUpdateDepth());
84 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
85 configuration.common().objectClass(Booking.class).cascadeOnDelete(true);
86 configuration.common().objectClass(RuralHouse.class)
87 .cascadeOnDelete(true);
88 configuration.common().objectClass(Account.class).cascadeOnDelete(true);
89 configuration.common().objectClass(Offer.class).cascadeOnDelete(true);
90 configuration.common().objectClass(Owner.class).cascadeOnUpdate(true);
91 configuration.common().objectClass(Booking.class).cascadeOnUpdate(true);
92 configuration.common().objectClass(RuralHouse.class)
93 .cascadeOnUpdate(true);
94 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
95 configuration.common().objectClass(Offer.class).cascadeOnUpdate(true);
96 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
97 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
100 private void openSDB() {
102 configurationCS = Db4oClientServer.newClientConfiguration();
103 configurationCS.common().activationDepth(c.getActivationDepth());
104 configurationCS.common().updateDepth(c.getUpdateDepth());
105 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
106 configurationCS.common().objectClass(Booking.class).cascadeOnDelete(true);
107 configurationCS.common().objectClass(RuralHouse.class)
108 .cascadeOnDelete(true);
109 configurationCS.common().objectClass(Account.class).cascadeOnDelete(true);
110 configurationCS.common().objectClass(Offer.class).cascadeOnDelete(true);
111 configurationCS.common().objectClass(Owner.class).cascadeOnUpdate(true);
112 configurationCS.common().objectClass(Booking.class).cascadeOnUpdate(true);
113 configurationCS.common().objectClass(RuralHouse.class)
114 .cascadeOnUpdate(true);
115 configurationCS.common().objectClass(Account.class).cascadeOnUpdate(true);
116 configurationCS.common().objectClass(Offer.class).cascadeOnUpdate(true);
117 configurationCS.common().objectClass(Account.class).cascadeOnUpdate(true);
118 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
119 c.getDatabasePort(), c.getUser(), c.getPassword());
123 class DB4oManagerAux {
127 DB4oManagerAux(int bookingNumber, int offerNumber) {
128 this.bookingNumber = bookingNumber;
129 this.offerNumber = offerNumber;
133 public static DB4oManager getInstance() throws Exception {
134 if (theDB4oManager == null)
135 theDB4oManager = new DB4oManager();
136 return theDB4oManager;
139 public void initializeDB() {
142 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
144 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
145 "alfredo@gmail.com");
146 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
148 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
150 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
153 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
154 Account jonAcc = new Account("1", "1", jon);
155 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
158 Account admin = new Account("admin", "admin", true);
159 db.store(Administrator.getInstance());
161 db.store(alfredoAcc);
169 public void deleteDB() {
171 if (c.isDatabaseLocal() == false)
177 Owner proto = new Owner(null, null, null);
178 ObjectSet<Owner> result = db.queryByExample(proto);
179 while (result.hasNext()) {
180 Owner o = (Owner) result.next();
181 System.out.println("Deleted owner: " + o.toString());
190 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
191 Date lastDay, float price) throws RemoteException, Exception {
194 if (c.isDatabaseLocal() == false)
201 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
203 ObjectSet<RuralHouse> result = db.queryByExample(proto);
204 RuralHouse rh = (RuralHouse) result.next();
205 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
207 db.store(theDB4oManagerAux); // To store the new value for
212 } catch (com.db4o.ext.ObjectNotStorableException e) {
214 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
221 public void deleteOffer(Offer offer) throws RemoteException, Exception {
222 if (c.isDatabaseLocal() == false)
228 ObjectSet<Offer> of = db.queryByExample(offer);
229 RuralHouse rh = of.get(0).getRuralHouse();
230 System.out.println(rh.getAllOffers().remove(of.get(0)));
234 } catch (com.db4o.ext.ObjectNotStorableException e) {
236 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
242 public Vector<Offer> getRHsOffer(String name) {
243 if (c.isDatabaseLocal() == false)
249 RuralHouse rh = (RuralHouse) db.queryByExample(
250 new RuralHouse(name, null, null, null, null)).get(0);
251 Offer proto = new Offer(0, rh, null, null, 0);
252 ObjectSet<Offer> result = db.queryByExample(proto);
253 return new Vector<Offer>(result);
259 public Administrator getAdminData() {
261 if (c.isDatabaseLocal() == false)
268 List<Administrator> admL = db.query(new Predicate<Administrator>() {
269 private static final long serialVersionUID = 1L;
271 public boolean match(Administrator admin) {
284 public void storeAdmin() {
286 if (c.isDatabaseLocal() == false)
292 List<Administrator> admL = db.query(new Predicate<Administrator>() {
296 private static final long serialVersionUID = 1L;
298 public boolean match(Administrator admin) {
303 admL.get(0).setAddRequest(
304 Administrator.getInstance().getAddRequest());
305 admL.get(0).setRemoveRequest(
306 Administrator.getInstance().getRemoveRequest());
307 admL.get(0).setNewOwnerRequest(
308 Administrator.getInstance().getNewOwnerRequest());
312 } catch (Exception e) {
321 * This method creates a book with a corresponding parameters
324 * day, last day, house number and telephone
327 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
328 Date lastDate, Client cl) throws OfferCanNotBeBooked {
330 if (c.isDatabaseLocal() == false)
335 Vector<Booking> book = new Vector<Booking>();
339 if (c.isDatabaseLocal() == false)
342 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
344 ObjectSet<RuralHouse> result = db.queryByExample(proto);
345 RuralHouse rh = (RuralHouse) result.next();
348 offer = (Offer)db.queryByExample(new Offer(0, rh, firstDate, lastDate, 0)).get(0);
351 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
352 db.store(theDB4oManagerAux); // To store the new value for
357 book = offer.getBookings();
361 } catch (com.db4o.ext.ObjectNotStorableException e) {
363 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
364 } catch (Exception exc) {
365 exc.printStackTrace();
373 * This method existing owners
376 public Vector<Owner> getOwners() throws RemoteException, Exception {
378 if (c.isDatabaseLocal() == false)
384 Owner proto = new Owner(null, null, null);
385 ObjectSet<Owner> result = db.queryByExample(proto);
386 Vector<Owner> owners = new Vector<Owner>();
387 while (result.hasNext())
388 owners.add((Owner) result.next());
397 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
398 Date lastDay) throws RemoteException, OverlappingOfferExists {
400 if (c.isDatabaseLocal() == false)
407 RuralHouse rhn = (RuralHouse) db.queryByExample(
408 new RuralHouse(rh.getHouseName(), null, null, null, null))
410 if (rhn.overlapsWith(firstDay, lastDay) != null)
411 throw new OverlappingOfferExists();
419 public void close() {
421 System.out.println("DataBase closed");
424 public String toString() {
425 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
432 * @throws RemoteException
435 public Vector<Account> getAccount(Account proto) throws RemoteException,
438 if (c.isDatabaseLocal() == false)
444 ObjectSet<Account> result = db.queryByExample(proto);
445 Vector<Account> accounts = new Vector<Account>();
446 while (result.hasNext())
447 accounts.add((Account) result.next());
457 public boolean storeRuralHouses(RuralHouse rh) {
459 if (c.isDatabaseLocal() == false)
464 boolean stored = false;
465 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
468 ObjectSet<RuralHouse> result = db.queryByExample(house);
469 if (result.isEmpty()) {
470 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
472 ow.addRuralHouse(rh);
477 db.delete(result.get(0));
488 public void removeHouse(RuralHouse rh, Owner owner) {
490 if (c.isDatabaseLocal() == false)
495 ObjectSet<Owner> result = db.queryByExample(owner);
496 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
497 if (!rhs.isEmpty()) {
498 Owner found = result.get(0);
499 found.getRuralHouses().remove(rhs.get(0));
500 db.delete(rhs.get(0));
504 } catch (Exception exc) {
505 exc.printStackTrace();
512 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
513 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
514 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
515 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
516 if (c.isDatabaseLocal() == false)
522 ObjectSet<RuralHouse> result = db.queryByExample(rh);
523 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
524 while (result.hasNext())
525 ruralHouses.add(result.next());
528 } catch (NullPointerException e) {
534 public boolean addAccount(Account acc) {
535 if (c.isDatabaseLocal() == false)
541 ObjectSet<Account> result = db.queryByExample(new Account(acc
543 if (result.isEmpty()) {
548 } catch (Exception exc) {
549 exc.printStackTrace();
556 public boolean removeAccount(Owner own) {
557 if (c.isDatabaseLocal() == false)
563 ObjectSet<Account> result = db.queryByExample(new Account(own));
564 if (!result.isEmpty()) {
565 db.delete(result.get(0));
569 } catch (Exception exc) {
570 exc.printStackTrace();
577 public void acceptBooking(Offer of) {
578 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
579 .getRuralHouse().getHouseName(), null, null, null, null), null,
581 if (c.isDatabaseLocal() == false)
587 ObjectSet<Offer> result = db.queryByExample(off);
588 db.delete(result.get(0));
589 RuralHouse rh = result.get(0).getRuralHouse();
590 of.setRuralHouse(rh);
591 rh.getAllOffers().remove(result.get(0));
592 rh.getAllOffers().add(of);
596 } catch (Exception e) {
602 public void removeBooking(Booking b) {
603 if (c.isDatabaseLocal() == false)
608 Booking book = new Booking(b.getBookNumber(), new Offer(b
609 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
610 .getRuralHouse().getHouseName(), null, null, null, null),
611 null, null, 0), b.getClient(), b.getBookDate());
615 } catch (Exception e) {
623 public Vector<Booking> getOfBok(Offer o) {
624 if (c.isDatabaseLocal() == false)
630 Offer of = (Offer) db.queryByExample(
631 new Offer(0, o.getRuralHouse(), null, null, 0)).get(0);
632 Booking proto = new Booking(0, of, null, null);
633 ObjectSet<Booking> result = db.queryByExample(proto);
634 return new Vector<Booking>(result);