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,
331 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
332 ObjectSet<RuralHouse> result = db.queryByExample(proto);
333 RuralHouse rh = (RuralHouse) result.next();
336 offer = rh.findOffer(firstDate, lastDate);
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());
383 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
386 if (c.isDatabaseLocal() == false)
392 RuralHouse proto = new RuralHouse(null, null, null, null, null);
393 ObjectSet<RuralHouse> result = db.queryByExample(proto);
394 return new Vector<RuralHouse>(result);
400 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
401 Date lastDay) throws RemoteException, OverlappingOfferExists {
403 if (c.isDatabaseLocal() == false)
410 RuralHouse rhn = (RuralHouse) db.queryByExample(
411 new RuralHouse(rh.getHouseName(), null, null, null, null))
413 if (rhn.overlapsWith(firstDay, lastDay) != null)
414 throw new OverlappingOfferExists();
422 public static ObjectContainer getContainer() {
426 public void close() {
428 System.out.println("DataBase closed");
431 public String toString() {
432 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
439 * @throws RemoteException
442 public Vector<Account> getAccount(Account proto) throws RemoteException,
445 if (c.isDatabaseLocal() == false)
451 ObjectSet<Account> result = db.queryByExample(proto);
452 Vector<Account> accounts = new Vector<Account>();
453 while (result.hasNext())
454 accounts.add((Account) result.next());
464 public boolean storeRuralHouses(RuralHouse rh) {
466 if (c.isDatabaseLocal() == false)
471 boolean stored = false;
472 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
475 ObjectSet<RuralHouse> result = db.queryByExample(house);
476 if (result.isEmpty()) {
477 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
479 ow.addRuralHouse(rh);
484 db.delete(result.get(0));
495 public void removeHouse(RuralHouse rh, Owner owner) {
497 if (c.isDatabaseLocal() == false)
502 ObjectSet<Owner> result = db.queryByExample(owner);
503 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
504 if (!rhs.isEmpty()) {
505 Owner found = result.get(0);
506 found.getRuralHouses().remove(rhs.get(0));
507 db.delete(rhs.get(0));
511 } catch (Exception exc) {
512 exc.printStackTrace();
519 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
520 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
521 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
522 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
523 if (c.isDatabaseLocal() == false)
529 ObjectSet<RuralHouse> result = db.queryByExample(rh);
530 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
531 while (result.hasNext())
532 ruralHouses.add(result.next());
535 } catch (NullPointerException e) {
541 public boolean addAccount(Account acc) {
542 if (c.isDatabaseLocal() == false)
548 ObjectSet<Account> result = db.queryByExample(new Account(acc
550 if (result.isEmpty()) {
555 } catch (Exception exc) {
556 exc.printStackTrace();
563 public boolean removeAccount(Owner own) {
564 if (c.isDatabaseLocal() == false)
570 ObjectSet<Account> result = db.queryByExample(new Account(own));
571 if (!result.isEmpty()) {
572 db.delete(result.get(0));
576 } catch (Exception exc) {
577 exc.printStackTrace();
584 public void acceptBooking(Offer of) {
585 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
586 .getRuralHouse().getHouseName(), null, null, null, null), null,
588 if (c.isDatabaseLocal() == false)
594 ObjectSet<Offer> result = db.queryByExample(off);
595 db.delete(result.get(0));
596 RuralHouse rh = result.get(0).getRuralHouse();
597 of.setRuralHouse(rh);
598 rh.getAllOffers().remove(result.get(0));
599 rh.getAllOffers().add(of);
603 } catch (Exception e) {
609 public void removeBooking(Booking b) {
610 if (c.isDatabaseLocal() == false)
615 Booking book = new Booking(b.getBookNumber(), new Offer(b
616 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
617 .getRuralHouse().getHouseName(), null, null, null, null),
618 null, null, 0), b.getClient(), b.getBookDate());
622 } catch (Exception e) {