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)
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 if (result.isEmpty()) {
474 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
476 ow.addRuralHouse(rh);
481 db.delete(result.get(0));
492 public void removeHouse(RuralHouse rh, Owner owner) {
494 if (c.isDatabaseLocal() == false)
499 ObjectSet<Owner> result = db.queryByExample(owner);
500 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
501 if (!rhs.isEmpty()) {
502 Owner found = result.get(0);
503 found.getRuralHouses().remove(rhs.get(0));
504 db.delete(rhs.get(0));
508 } catch (Exception exc) {
509 exc.printStackTrace();
516 public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
517 String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
518 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
521 Owner own = new Owner(ow.getName(), ow.getBankAccount(),
522 ow.getMailAccount());
523 rh = new RuralHouse(name, own, null, town, fea);
525 rh = new RuralHouse(name, ow, null, town, fea);
527 if (c.isDatabaseLocal() == false)
533 ObjectSet<RuralHouse> result = db.queryByExample(rh);
534 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
535 while (result.hasNext())
536 ruralHouses.add(result.next());
539 } catch (NullPointerException e) {
545 public boolean addAccount(Account acc) {
546 if (c.isDatabaseLocal() == false)
552 ObjectSet<Account> result = db.queryByExample(new Account(acc
554 if (result.isEmpty()) {
559 } catch (Exception exc) {
560 exc.printStackTrace();
567 public boolean removeAccount(Owner own) {
568 if (c.isDatabaseLocal() == false)
574 ObjectSet<Account> result = db.queryByExample(new Account(own));
575 if (!result.isEmpty()) {
576 db.delete(result.get(0));
580 } catch (Exception exc) {
581 exc.printStackTrace();
588 public void acceptBooking(Offer of) {
589 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
590 .getRuralHouse().getHouseName(), null, null, null, null), null,
592 if (c.isDatabaseLocal() == false)
598 ObjectSet<Offer> result = db.queryByExample(off);
599 db.delete(result.get(0));
600 RuralHouse rh = result.get(0).getRuralHouse();
601 of.setRuralHouse(rh);
602 rh.getAllOffers().remove(result.get(0));
603 rh.getAllOffers().add(of);
607 } catch (Exception e) {
613 public void removeBooking(Booking b) {
614 if (c.isDatabaseLocal() == false)
619 Booking book = new Booking(b.getBookNumber(), new Offer(b
620 .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
621 .getRuralHouse().getHouseName(), null, null, null, null),
622 null, null, 0), b.getClient(), b.getBookDate());
626 } catch (Exception e) {
634 public Vector<Booking> getOfBok(Offer o) {
635 if (c.isDatabaseLocal() == false)
641 Offer of = (Offer) db.queryByExample(
642 new Offer(o.getOfferNumber(), new RuralHouse(o
643 .getRuralHouse().getHouseName(), null, null, null,
644 null), null, null, 0)).get(0);
645 Booking proto = new Booking(0, of, null, null);
646 ObjectSet<Booking> result = db.queryByExample(proto);
647 return new Vector<Booking>(result);