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 = 1; // if it is "static" then it is not
40 private int offerNumber = 1; // 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(1, 1);
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)
107 .cascadeOnDelete(true);
108 configurationCS.common().objectClass(RuralHouse.class)
109 .cascadeOnDelete(true);
110 configurationCS.common().objectClass(Account.class)
111 .cascadeOnDelete(true);
112 configurationCS.common().objectClass(Offer.class).cascadeOnDelete(true);
113 configurationCS.common().objectClass(Owner.class).cascadeOnUpdate(true);
114 configurationCS.common().objectClass(Booking.class)
115 .cascadeOnUpdate(true);
116 configurationCS.common().objectClass(RuralHouse.class)
117 .cascadeOnUpdate(true);
118 configurationCS.common().objectClass(Account.class)
119 .cascadeOnUpdate(true);
120 configurationCS.common().objectClass(Offer.class).cascadeOnUpdate(true);
121 configurationCS.common().objectClass(Account.class)
122 .cascadeOnUpdate(true);
123 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
124 c.getDatabasePort(), c.getUser(), c.getPassword());
128 class DB4oManagerAux {
132 DB4oManagerAux(int bookingNumber, int offerNumber) {
133 this.bookingNumber = bookingNumber;
134 this.offerNumber = offerNumber;
138 public static DB4oManager getInstance() throws Exception {
139 if (theDB4oManager == null)
140 theDB4oManager = new DB4oManager();
141 return theDB4oManager;
144 public void initializeDB() {
147 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
149 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
150 "alfredo@gmail.com");
151 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
153 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
155 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
158 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
159 Account jonAcc = new Account("1", "1", jon);
160 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
163 Account admin = new Account("admin", "admin", true);
164 db.store(Administrator.getInstance());
166 db.store(alfredoAcc);
174 public void deleteDB() {
176 if (c.isDatabaseLocal() == false)
182 Owner proto = new Owner(null, null, null);
183 ObjectSet<Owner> result = db.queryByExample(proto);
184 while (result.hasNext()) {
185 Owner o = (Owner) result.next();
186 System.out.println("Deleted owner: " + o.toString());
195 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
196 Date lastDay, float price) throws RemoteException, Exception {
199 if (c.isDatabaseLocal() == false)
206 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
208 ObjectSet<RuralHouse> result = db.queryByExample(proto);
209 RuralHouse rh = (RuralHouse) result.next();
210 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
212 db.store(theDB4oManagerAux); // To store the new value for
217 } catch (com.db4o.ext.ObjectNotStorableException e) {
219 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
226 public void deleteOffer(Offer offer) throws RemoteException, Exception {
227 if (c.isDatabaseLocal() == false)
233 ObjectSet<Offer> of = db.queryByExample(offer);
234 RuralHouse rh = of.get(0).getRuralHouse();
235 System.out.println(rh.getAllOffers().remove(of.get(0)));
239 } catch (com.db4o.ext.ObjectNotStorableException e) {
241 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
247 public Vector<Offer> getRHsOffer(String name) {
248 if (c.isDatabaseLocal() == false)
254 RuralHouse rh = (RuralHouse) db.queryByExample(
255 new RuralHouse(name, null, null, null, null)).get(0);
256 Offer proto = new Offer(0, rh, null, null, 0);
257 ObjectSet<Offer> result = db.queryByExample(proto);
258 return new Vector<Offer>(result);
264 public Administrator getAdminData() {
266 if (c.isDatabaseLocal() == false)
273 List<Administrator> admL = db.query(new Predicate<Administrator>() {
274 private static final long serialVersionUID = 1L;
276 public boolean match(Administrator admin) {
289 public void storeAdmin() {
291 if (c.isDatabaseLocal() == false)
297 List<Administrator> admL = db.query(new Predicate<Administrator>() {
301 private static final long serialVersionUID = 1L;
303 public boolean match(Administrator admin) {
308 admL.get(0).setAddRequest(
309 Administrator.getInstance().getAddRequest());
310 admL.get(0).setRemoveRequest(
311 Administrator.getInstance().getRemoveRequest());
312 admL.get(0).setNewOwnerRequest(
313 Administrator.getInstance().getNewOwnerRequest());
317 } catch (Exception e) {
326 * This method creates a book with a corresponding parameters
329 * day, last day, house number and telephone
332 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
333 Date lastDate, Client cl) throws OfferCanNotBeBooked {
335 if (c.isDatabaseLocal() == false)
340 Vector<Booking> book = new Vector<Booking>();
344 if (c.isDatabaseLocal() == false)
347 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
349 ObjectSet<RuralHouse> result = db.queryByExample(proto);
350 RuralHouse rh = (RuralHouse) result.next();
353 offer = (Offer) db.queryByExample(
354 new Offer(0, rh, firstDate, lastDate, 0)).get(0);
357 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
358 db.store(theDB4oManagerAux); // To store the new value for
363 book = offer.getBookings();
367 } catch (com.db4o.ext.ObjectNotStorableException e) {
369 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
370 } catch (Exception exc) {
371 exc.printStackTrace();
379 * This method existing owners
382 public Vector<Owner> getOwners() throws RemoteException, Exception {
384 if (c.isDatabaseLocal() == false)
390 Owner proto = new Owner(null, null, null);
391 ObjectSet<Owner> result = db.queryByExample(proto);
392 Vector<Owner> owners = new Vector<Owner>();
393 while (result.hasNext())
394 owners.add((Owner) result.next());
401 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
402 Date lastDay) throws RemoteException, OverlappingOfferExists {
404 if (c.isDatabaseLocal() == false)
411 RuralHouse rhn = (RuralHouse) db.queryByExample(
412 new RuralHouse(rh.getHouseName(), null, null, null, null))
414 if (rhn.overlapsWith(firstDay, lastDay) != null)
415 throw new OverlappingOfferExists();
423 public void close() {
425 System.out.println("DataBase closed");
428 public String toString() {
429 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
436 * @throws RemoteException
439 public Vector<Account> getAccount(Account proto) throws RemoteException,
442 if (c.isDatabaseLocal() == false)
448 ObjectSet<Account> result = db.queryByExample(proto);
449 Vector<Account> accounts = new Vector<Account>();
450 while (result.hasNext())
451 accounts.add((Account) result.next());
461 public boolean storeRuralHouses(RuralHouse rh) {
463 if (c.isDatabaseLocal() == false)
468 boolean stored = false;
469 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
472 ObjectSet<RuralHouse> result = db.queryByExample(house);
473 Owner own = new Owner(rh.getOwner().getName(),rh.getOwner().getBankAccount(),rh.getOwner().getMailAccount());
474 Owner ow = (Owner) db.queryByExample(own).get(0);
476 if (result.isEmpty()) {
477 ow.addRuralHouse(rh);
482 ow.getRuralHouses().remove(result.get(0));
483 result.get(0).setOwner(null);
484 ow.addRuralHouse(rh);
485 db.store(result.get(0));
486 db.delete(result.get(0));
497 public void removeHouse(RuralHouse rh, Owner owner) {
499 if (c.isDatabaseLocal() == false)
504 ObjectSet<Owner> result = db.queryByExample(owner);
505 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
506 if (!rhs.isEmpty()) {
507 Owner found = result.get(0);
508 found.getRuralHouses().remove(rhs.get(0));
509 db.delete(rhs.get(0));
513 } catch (Exception exc) {
514 exc.printStackTrace();
521 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
522 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
523 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
526 Owner own = new Owner(ow.getName(), ow.getBankAccount(),
527 ow.getMailAccount());
528 rh = new RuralHouse(name, own, null, town, fea);
530 rh = new RuralHouse(name, ow, null, town, fea);
532 if (c.isDatabaseLocal() == false)
538 ObjectSet<RuralHouse> result = db.queryByExample(rh);
539 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
540 while (result.hasNext())
541 ruralHouses.add(result.next());
544 } catch (NullPointerException e) {
550 public boolean addAccount(Account acc) {
551 if (c.isDatabaseLocal() == false)
557 ObjectSet<Account> result = db.queryByExample(new Account(acc
559 if (result.isEmpty()) {
564 } catch (Exception exc) {
565 exc.printStackTrace();
572 public boolean removeAccount(Owner own) {
573 if (c.isDatabaseLocal() == false)
579 ObjectSet<Account> result = db.queryByExample(new Account(own));
580 if (!result.isEmpty()) {
581 db.delete(result.get(0));
585 } catch (Exception exc) {
586 exc.printStackTrace();
593 public void acceptBooking(Offer of) {
594 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
595 .getRuralHouse().getHouseName(), null, null, null, null), null,
597 if (c.isDatabaseLocal() == false)
603 ObjectSet<Offer> result = db.queryByExample(off);
604 db.delete(result.get(0));
605 RuralHouse rh = result.get(0).getRuralHouse();
606 of.setRuralHouse(rh);
607 rh.getAllOffers().remove(result.get(0));
608 rh.getAllOffers().add(of);
612 } catch (Exception e) {
618 public void removeBooking(Booking b) {
619 if (c.isDatabaseLocal() == false)
624 Booking book = new Booking(b.getBookNumber(), new Offer(b
625 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
626 .getRuralHouse().getHouseName(), null, null, null, null),
627 null, null, 0), b.getClient(), b.getBookDate());
628 Booking delete = (Booking) db.queryByExample(book).get(0);
629 delete.setOffer(null);
633 } catch (Exception e) {
641 public Vector<Booking> getOfBok(Offer o) {
642 if (c.isDatabaseLocal() == false)
648 Offer of = (Offer) db.queryByExample(
649 new Offer(0, new RuralHouse(o
650 .getRuralHouse().getHouseName(), null, null, null,
651 null), o.getFirstDay(), o.getLastDay(), 0)).get(0);
652 Booking proto = new Booking(0, of, null, null);
653 ObjectSet<Booking> result = db.queryByExample(proto);
654 return new Vector<Booking>(result);