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)
89 .cascadeOnDelete(true);
90 configuration.common().objectClass(Offer.class).cascadeOnDelete(true);
91 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
92 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
95 private void openSDB() {
97 configurationCS = Db4oClientServer.newClientConfiguration();
98 configurationCS.common().activationDepth(c.getActivationDepth());
99 configurationCS.common().updateDepth(c.getUpdateDepth());
100 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
101 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
102 c.getDatabasePort(), c.getUser(), c.getPassword());
106 class DB4oManagerAux {
110 DB4oManagerAux(int bookingNumber, int offerNumber) {
111 this.bookingNumber = bookingNumber;
112 this.offerNumber = offerNumber;
116 public static DB4oManager getInstance() throws Exception {
117 if (theDB4oManager == null)
118 theDB4oManager = new DB4oManager();
119 return theDB4oManager;
122 public void initializeDB() {
125 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
127 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
128 "alfredo@gmail.com");
129 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
131 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
133 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
136 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
137 Account jonAcc = new Account("1", "1", jon);
138 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
141 Account admin = new Account("admin", "admin", true);
142 db.store(Administrator.getInstance());
144 db.store(alfredoAcc);
152 public void deleteDB() {
154 if (c.isDatabaseLocal() == false)
160 Owner proto = new Owner(null, null, null);
161 ObjectSet<Owner> result = db.queryByExample(proto);
162 while (result.hasNext()) {
163 Owner o = (Owner) result.next();
164 System.out.println("Deleted owner: " + o.toString());
173 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
174 Date lastDay, float price) throws RemoteException, Exception {
177 if (c.isDatabaseLocal() == false)
184 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
186 ObjectSet<RuralHouse> result = db.queryByExample(proto);
187 RuralHouse rh = (RuralHouse) result.next();
188 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
190 db.store(theDB4oManagerAux); // To store the new value for
195 } catch (com.db4o.ext.ObjectNotStorableException e) {
197 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
204 public void deleteOffer(Offer offer) throws RemoteException, Exception {
205 if (c.isDatabaseLocal() == false)
211 ObjectSet<Offer> of = db.queryByExample(offer);
212 RuralHouse rh = of.get(0).getRuralHouse();
213 System.out.println(rh.getAllOffers().remove(of.get(0)));
217 } catch (com.db4o.ext.ObjectNotStorableException e) {
219 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
225 public Vector<Offer> getRHsOffer(String name){
226 if (c.isDatabaseLocal() == false)
232 RuralHouse rh = (RuralHouse)db.queryByExample(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());
378 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
381 if (c.isDatabaseLocal() == false)
387 RuralHouse proto = new RuralHouse(null, null, null, null, null);
388 ObjectSet<RuralHouse> result = db.queryByExample(proto);
389 return new Vector<RuralHouse>(result);
395 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
396 Date lastDay) throws RemoteException, OverlappingOfferExists {
398 if (c.isDatabaseLocal() == false)
405 RuralHouse rhn = (RuralHouse) db.queryByExample(
406 new RuralHouse(rh.getHouseName(), null, null, null, null))
408 if (rhn.overlapsWith(firstDay, lastDay) != null)
409 throw new OverlappingOfferExists();
417 public static ObjectContainer getContainer() {
421 public void close() {
423 System.out.println("DataBase closed");
426 public String toString() {
427 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
434 * @throws RemoteException
437 public Vector<Account> getAccount(Account proto) throws RemoteException,
440 if (c.isDatabaseLocal() == false)
446 ObjectSet<Account> result = db.queryByExample(proto);
447 Vector<Account> accounts = new Vector<Account>();
448 while (result.hasNext())
449 accounts.add((Account) result.next());
459 public boolean storeRuralHouses(RuralHouse rh) {
461 if (c.isDatabaseLocal() == false)
466 boolean stored = false;
467 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
470 ObjectSet<RuralHouse> result = db.queryByExample(house);
471 if (result.isEmpty()) {
472 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
474 ow.addRuralHouse(rh);
479 db.delete(result.get(0));
490 public void removeHouse(RuralHouse rh, Owner owner) {
492 if (c.isDatabaseLocal() == false)
497 ObjectSet<Owner> result = db.queryByExample(owner);
498 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
499 if (!rhs.isEmpty()) {
500 Owner found = result.get(0);
501 found.getRuralHouses().remove(rhs.get(0));
502 db.delete(rhs.get(0));
506 } catch (Exception exc) {
507 exc.printStackTrace();
514 public Vector<RuralHouse> getRuralHouses(Owner ow, String name, String town,
515 int nBed, int nKit, int nBath, int nPark, int nLiv) {
516 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
517 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
518 if (c.isDatabaseLocal() == false)
524 ObjectSet<RuralHouse> result = db.queryByExample(rh);
525 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
526 while (result.hasNext())
527 ruralHouses.add(result.next());
530 } catch (NullPointerException e) {
536 public boolean addAccount(Account acc) {
537 if (c.isDatabaseLocal() == false)
543 ObjectSet<Account> result = db.queryByExample(new Account(acc
545 if (result.isEmpty()) {
550 } catch (Exception exc) {
551 exc.printStackTrace();
558 public boolean removeAccount(Owner own) {
559 if (c.isDatabaseLocal() == false)
565 ObjectSet<Account> result = db.queryByExample(new Account(own));
566 if (!result.isEmpty()) {
567 db.delete(result.get(0));
571 } catch (Exception exc) {
572 exc.printStackTrace();
579 public void acceptBooking(Offer of) {
580 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
581 .getRuralHouse().getHouseName(), null, null, null, null), null,
583 if (c.isDatabaseLocal() == false)
589 ObjectSet<Offer> result = db.queryByExample(off);
590 db.delete(result.get(0));
591 RuralHouse rh = result.get(0).getRuralHouse();
592 of.setRuralHouse(rh);
593 rh.getAllOffers().remove(result.get(0));
594 rh.getAllOffers().add(of);
598 } catch (Exception e) {
604 public void removeBooking(Booking b) {
605 if (c.isDatabaseLocal() == false)
610 ObjectSet<Booking> result = db.queryByExample(b);
611 result.get(0).getOffer().getBookings().remove(b);
612 db.store(result.get(0).getOffer());
613 db.delete(result.get(0));
615 } catch (Exception e) {