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 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
107 c.getDatabasePort(), c.getUser(), c.getPassword());
111 class DB4oManagerAux {
115 DB4oManagerAux(int bookingNumber, int offerNumber) {
116 this.bookingNumber = bookingNumber;
117 this.offerNumber = offerNumber;
121 public static DB4oManager getInstance() throws Exception {
122 if (theDB4oManager == null)
123 theDB4oManager = new DB4oManager();
124 return theDB4oManager;
127 public void initializeDB() {
130 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
132 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
133 "alfredo@gmail.com");
134 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
136 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
138 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
141 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
142 Account jonAcc = new Account("1", "1", jon);
143 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
146 Account admin = new Account("admin", "admin", true);
147 db.store(Administrator.getInstance());
149 db.store(alfredoAcc);
157 public void deleteDB() {
159 if (c.isDatabaseLocal() == false)
165 Owner proto = new Owner(null, null, null);
166 ObjectSet<Owner> result = db.queryByExample(proto);
167 while (result.hasNext()) {
168 Owner o = (Owner) result.next();
169 System.out.println("Deleted owner: " + o.toString());
178 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
179 Date lastDay, float price) throws RemoteException, Exception {
182 if (c.isDatabaseLocal() == false)
189 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
191 ObjectSet<RuralHouse> result = db.queryByExample(proto);
192 RuralHouse rh = (RuralHouse) result.next();
193 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
195 db.store(theDB4oManagerAux); // To store the new value for
200 } catch (com.db4o.ext.ObjectNotStorableException e) {
202 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
209 public void deleteOffer(Offer offer) throws RemoteException, Exception {
210 if (c.isDatabaseLocal() == false)
216 ObjectSet<Offer> of = db.queryByExample(offer);
217 RuralHouse rh = of.get(0).getRuralHouse();
218 System.out.println(rh.getAllOffers().remove(of.get(0)));
222 } catch (com.db4o.ext.ObjectNotStorableException e) {
224 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
230 public Vector<Offer> getRHsOffer(String name) {
231 if (c.isDatabaseLocal() == false)
237 RuralHouse rh = (RuralHouse) db.queryByExample(
238 new RuralHouse(name, null, null, null, null)).get(0);
239 Offer proto = new Offer(0, rh, null, null, 0);
240 ObjectSet<Offer> result = db.queryByExample(proto);
241 return new Vector<Offer>(result);
247 public Administrator getAdminData() {
249 if (c.isDatabaseLocal() == false)
256 List<Administrator> admL = db.query(new Predicate<Administrator>() {
257 private static final long serialVersionUID = 1L;
259 public boolean match(Administrator admin) {
272 public void storeAdmin() {
274 if (c.isDatabaseLocal() == false)
280 List<Administrator> admL = db.query(new Predicate<Administrator>() {
284 private static final long serialVersionUID = 1L;
286 public boolean match(Administrator admin) {
291 admL.get(0).setAddRequest(
292 Administrator.getInstance().getAddRequest());
293 admL.get(0).setRemoveRequest(
294 Administrator.getInstance().getRemoveRequest());
295 admL.get(0).setNewOwnerRequest(
296 Administrator.getInstance().getNewOwnerRequest());
300 } catch (Exception e) {
309 * This method creates a book with a corresponding parameters
312 * day, last day, house number and telephone
315 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
316 Date lastDate, Client cl) throws OfferCanNotBeBooked {
318 if (c.isDatabaseLocal() == false)
323 Vector<Booking> book = new Vector<Booking>();
327 if (c.isDatabaseLocal() == false)
330 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
332 ObjectSet<RuralHouse> result = db.queryByExample(proto);
333 RuralHouse rh = (RuralHouse) result.next();
336 offer = (Offer)db.queryByExample(new Offer(0, rh, firstDate, lastDate, 0)).get(0);
339 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
340 db.store(theDB4oManagerAux); // To store the new value for
345 book = offer.getBookings();
349 } catch (com.db4o.ext.ObjectNotStorableException e) {
351 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
352 } catch (Exception exc) {
353 exc.printStackTrace();
361 * This method existing owners
364 public Vector<Owner> getOwners() throws RemoteException, Exception {
366 if (c.isDatabaseLocal() == false)
372 Owner proto = new Owner(null, null, null);
373 ObjectSet<Owner> result = db.queryByExample(proto);
374 Vector<Owner> owners = new Vector<Owner>();
375 while (result.hasNext())
376 owners.add((Owner) result.next());
385 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
386 Date lastDay) throws RemoteException, OverlappingOfferExists {
388 if (c.isDatabaseLocal() == false)
395 RuralHouse rhn = (RuralHouse) db.queryByExample(
396 new RuralHouse(rh.getHouseName(), null, null, null, null))
398 if (rhn.overlapsWith(firstDay, lastDay) != null)
399 throw new OverlappingOfferExists();
407 public void close() {
409 System.out.println("DataBase closed");
412 public String toString() {
413 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
420 * @throws RemoteException
423 public Vector<Account> getAccount(Account proto) throws RemoteException,
426 if (c.isDatabaseLocal() == false)
432 ObjectSet<Account> result = db.queryByExample(proto);
433 Vector<Account> accounts = new Vector<Account>();
434 while (result.hasNext())
435 accounts.add((Account) result.next());
445 public boolean storeRuralHouses(RuralHouse rh) {
447 if (c.isDatabaseLocal() == false)
452 boolean stored = false;
453 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
456 ObjectSet<RuralHouse> result = db.queryByExample(house);
457 if (result.isEmpty()) {
458 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
460 ow.addRuralHouse(rh);
465 db.delete(result.get(0));
476 public void removeHouse(RuralHouse rh, Owner owner) {
478 if (c.isDatabaseLocal() == false)
483 ObjectSet<Owner> result = db.queryByExample(owner);
484 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
485 if (!rhs.isEmpty()) {
486 Owner found = result.get(0);
487 found.getRuralHouses().remove(rhs.get(0));
488 db.delete(rhs.get(0));
492 } catch (Exception exc) {
493 exc.printStackTrace();
500 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
501 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
502 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
503 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
504 if (c.isDatabaseLocal() == false)
510 ObjectSet<RuralHouse> result = db.queryByExample(rh);
511 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
512 while (result.hasNext())
513 ruralHouses.add(result.next());
516 } catch (NullPointerException e) {
522 public boolean addAccount(Account acc) {
523 if (c.isDatabaseLocal() == false)
529 ObjectSet<Account> result = db.queryByExample(new Account(acc
531 if (result.isEmpty()) {
536 } catch (Exception exc) {
537 exc.printStackTrace();
544 public boolean removeAccount(Owner own) {
545 if (c.isDatabaseLocal() == false)
551 ObjectSet<Account> result = db.queryByExample(new Account(null,null,own));
552 if (!result.isEmpty()) {
553 db.delete(result.get(0));
557 } catch (Exception exc) {
558 exc.printStackTrace();
565 public void acceptBooking(Offer of) {
566 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
567 .getRuralHouse().getHouseName(), null, null, null, null), null,
569 if (c.isDatabaseLocal() == false)
575 ObjectSet<Offer> result = db.queryByExample(off);
576 db.delete(result.get(0));
577 RuralHouse rh = result.get(0).getRuralHouse();
578 of.setRuralHouse(rh);
579 rh.getAllOffers().remove(result.get(0));
580 rh.getAllOffers().add(of);
584 } catch (Exception e) {
590 public void removeBooking(Booking b) {
591 if (c.isDatabaseLocal() == false)
596 Booking book = new Booking(b.getBookNumber(), new Offer(b
597 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
598 .getRuralHouse().getHouseName(), null, null, null, null),
599 null, null, 0), b.getClient(), b.getBookDate());
603 } catch (Exception e) {