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(Account.class).cascadeOnUpdate(true);
91 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
94 private void openSDB() {
96 configurationCS = Db4oClientServer.newClientConfiguration();
97 configurationCS.common().activationDepth(c.getActivationDepth());
98 configurationCS.common().updateDepth(c.getUpdateDepth());
99 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
100 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
101 c.getDatabasePort(), c.getUser(), c.getPassword());
105 class DB4oManagerAux {
109 DB4oManagerAux(int bookingNumber, int offerNumber) {
110 this.bookingNumber = bookingNumber;
111 this.offerNumber = offerNumber;
115 public static DB4oManager getInstance() throws Exception {
116 if (theDB4oManager == null)
117 theDB4oManager = new DB4oManager();
118 return theDB4oManager;
121 public void initializeDB() {
124 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
126 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
127 "alfredo@gmail.com");
128 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
130 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
132 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
135 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
136 Account jonAcc = new Account("1", "1", jon);
137 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
140 Account admin = new Account("admin", "admin", true);
141 db.store(Administrator.getInstance());
143 db.store(alfredoAcc);
151 public void deleteDB() {
153 if (c.isDatabaseLocal() == false)
159 Owner proto = new Owner(null, null, null);
160 ObjectSet<Owner> result = db.queryByExample(proto);
161 while (result.hasNext()) {
162 Owner o = (Owner) result.next();
163 System.out.println("Deleted owner: " + o.toString());
172 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
173 Date lastDay, float price) throws RemoteException, Exception {
176 if (c.isDatabaseLocal() == false)
183 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
185 ObjectSet<RuralHouse> result = db.queryByExample(proto);
186 RuralHouse rh = (RuralHouse) result.next();
187 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
189 db.store(theDB4oManagerAux); // To store the new value for
194 } catch (com.db4o.ext.ObjectNotStorableException e) {
196 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
203 public void deleteOffer(Offer offer) throws RemoteException, Exception {
204 if (c.isDatabaseLocal() == false)
210 ObjectSet<Offer> of = db.queryByExample(offer);
211 RuralHouse rh = of.get(0).getRuralHouse();
212 System.out.println(rh.getAllOffers().remove(of.get(0)));
216 } catch (com.db4o.ext.ObjectNotStorableException e) {
218 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
224 public Vector<Offer> getRHsOffer(String name) {
225 if (c.isDatabaseLocal() == false)
231 RuralHouse rh = (RuralHouse) db.queryByExample(
232 new RuralHouse(name, null, null, null, null)).get(0);
233 Offer proto = new Offer(0, rh, null, null, 0);
234 ObjectSet<Offer> result = db.queryByExample(proto);
235 return new Vector<Offer>(result);
241 public Administrator getAdminData() {
243 if (c.isDatabaseLocal() == false)
250 List<Administrator> admL = db.query(new Predicate<Administrator>() {
251 private static final long serialVersionUID = 1L;
253 public boolean match(Administrator admin) {
266 public void storeAdmin() {
268 if (c.isDatabaseLocal() == false)
274 List<Administrator> admL = db.query(new Predicate<Administrator>() {
278 private static final long serialVersionUID = 1L;
280 public boolean match(Administrator admin) {
285 admL.get(0).setAddRequest(
286 Administrator.getInstance().getAddRequest());
287 admL.get(0).setRemoveRequest(
288 Administrator.getInstance().getRemoveRequest());
289 admL.get(0).setNewOwnerRequest(
290 Administrator.getInstance().getNewOwnerRequest());
294 } catch (Exception e) {
303 * This method creates a book with a corresponding parameters
306 * day, last day, house number and telephone
309 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
310 Date lastDate, Client cl) throws OfferCanNotBeBooked {
312 if (c.isDatabaseLocal() == false)
317 Vector<Booking> book = new Vector<Booking>();
321 if (c.isDatabaseLocal() == false)
324 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
325 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
326 ObjectSet<RuralHouse> result = db.queryByExample(proto);
327 RuralHouse rh = (RuralHouse) result.next();
330 offer = rh.findOffer(firstDate, lastDate);
333 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
334 db.store(theDB4oManagerAux); // To store the new value for
339 book = offer.getBookings();
343 } catch (com.db4o.ext.ObjectNotStorableException e) {
345 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
346 } catch (Exception exc) {
347 exc.printStackTrace();
355 * This method existing owners
358 public Vector<Owner> getOwners() throws RemoteException, Exception {
360 if (c.isDatabaseLocal() == false)
366 Owner proto = new Owner(null, null, null);
367 ObjectSet<Owner> result = db.queryByExample(proto);
368 Vector<Owner> owners = new Vector<Owner>();
369 while (result.hasNext())
370 owners.add((Owner) result.next());
377 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
380 if (c.isDatabaseLocal() == false)
386 RuralHouse proto = new RuralHouse(null, null, null, null, null);
387 ObjectSet<RuralHouse> result = db.queryByExample(proto);
388 return new Vector<RuralHouse>(result);
394 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
395 Date lastDay) throws RemoteException, OverlappingOfferExists {
397 if (c.isDatabaseLocal() == false)
404 RuralHouse rhn = (RuralHouse) db.queryByExample(
405 new RuralHouse(rh.getHouseName(), null, null, null, null))
407 if (rhn.overlapsWith(firstDay, lastDay) != null)
408 throw new OverlappingOfferExists();
416 public static ObjectContainer getContainer() {
420 public void close() {
422 System.out.println("DataBase closed");
425 public String toString() {
426 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
433 * @throws RemoteException
436 public Vector<Account> getAccount(Account proto) throws RemoteException,
439 if (c.isDatabaseLocal() == false)
445 ObjectSet<Account> result = db.queryByExample(proto);
446 Vector<Account> accounts = new Vector<Account>();
447 while (result.hasNext())
448 accounts.add((Account) result.next());
458 public boolean storeRuralHouses(RuralHouse rh) {
460 if (c.isDatabaseLocal() == false)
465 boolean stored = false;
466 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
469 ObjectSet<RuralHouse> result = db.queryByExample(house);
470 if (result.isEmpty()) {
471 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
473 ow.addRuralHouse(rh);
478 db.delete(result.get(0));
489 public void removeHouse(RuralHouse rh, Owner owner) {
491 if (c.isDatabaseLocal() == false)
496 ObjectSet<Owner> result = db.queryByExample(owner);
497 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
498 if (!rhs.isEmpty()) {
499 Owner found = result.get(0);
500 found.getRuralHouses().remove(rhs.get(0));
501 db.delete(rhs.get(0));
505 } catch (Exception exc) {
506 exc.printStackTrace();
513 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
514 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
515 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
516 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
517 if (c.isDatabaseLocal() == false)
523 ObjectSet<RuralHouse> result = db.queryByExample(rh);
524 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
525 while (result.hasNext())
526 ruralHouses.add(result.next());
529 } catch (NullPointerException e) {
535 public boolean addAccount(Account acc) {
536 if (c.isDatabaseLocal() == false)
542 ObjectSet<Account> result = db.queryByExample(new Account(acc
544 if (result.isEmpty()) {
549 } catch (Exception exc) {
550 exc.printStackTrace();
557 public boolean removeAccount(Owner own) {
558 if (c.isDatabaseLocal() == false)
564 ObjectSet<Account> result = db.queryByExample(new Account(own));
565 if (!result.isEmpty()) {
566 db.delete(result.get(0));
570 } catch (Exception exc) {
571 exc.printStackTrace();
578 public void acceptBooking(Offer of) {
579 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
580 .getRuralHouse().getHouseName(), null, null, null, null), null,
582 if (c.isDatabaseLocal() == false)
588 ObjectSet<Offer> result = db.queryByExample(off);
589 db.delete(result.get(0));
590 RuralHouse rh = result.get(0).getRuralHouse();
591 of.setRuralHouse(rh);
592 rh.getAllOffers().remove(result.get(0));
593 rh.getAllOffers().add(of);
597 } catch (Exception e) {
603 public void removeBooking(Booking b) {
604 if (c.isDatabaseLocal() == false)
609 Booking book = new Booking(b.getBookNumber(), new Offer(b
610 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
611 .getRuralHouse().getHouseName(), null, null, null, null),
612 null, null, 0), b.getClient(), b.getBookDate());
614 ObjectSet<Booking> result = db.queryByExample(book);
615 Offer of = result.get(0).getOffer();
616 of.getBookings().remove(result.get(0));
619 } catch (Exception e) {