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).cascadeOnUpdate(true);
85 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
86 configuration.common().objectClass(RuralHouse.class)
87 .cascadeOnUpdate(true);
88 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
89 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
92 private void openSDB() {
94 configurationCS = Db4oClientServer.newClientConfiguration();
95 configurationCS.common().activationDepth(c.getActivationDepth());
96 configurationCS.common().updateDepth(c.getUpdateDepth());
97 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
98 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
99 c.getDatabasePort(), c.getUser(), c.getPassword());
103 class DB4oManagerAux {
107 DB4oManagerAux(int bookingNumber, int offerNumber) {
108 this.bookingNumber = bookingNumber;
109 this.offerNumber = offerNumber;
113 public static DB4oManager getInstance() throws Exception {
114 if (theDB4oManager == null)
115 theDB4oManager = new DB4oManager();
116 return theDB4oManager;
119 public void initializeDB() {
122 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
124 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
125 "alfredo@gmail.com");
126 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
128 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
130 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
133 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
134 Account jonAcc = new Account("1", "1", jon);
135 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
139 Account admin = new Account("admin", "admin", true);
140 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.offers.remove(of.get(0)));
216 } catch (com.db4o.ext.ObjectNotStorableException e) {
218 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
226 public Administrator getAdminData(){
227 if (c.isDatabaseLocal() == false)
235 List<Administrator> admL = db.query(new Predicate<Administrator>(){
236 private static final long serialVersionUID = 1L;
238 public boolean match(Administrator admin) {
254 public void storeAdmin() {
256 if (c.isDatabaseLocal() == false)
262 List<Administrator> admL = db.query(new Predicate<Administrator>() {
266 private static final long serialVersionUID = 1L;
268 public boolean match(Administrator admin) {
273 admL.get(0).setAddRequest(
274 Administrator.getInstance().getAddRequest());
275 admL.get(0).setRemoveRequest(
276 Administrator.getInstance().getRemoveRequest());
277 admL.get(0).setNewOwnerRequest(
278 Administrator.getInstance().getNewOwnerRequest());
282 } catch (Exception e) {
291 * This method creates a book with a corresponding parameters
294 * day, last day, house number and telephone
297 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
298 Date lastDate, Client cl) throws OfferCanNotBeBooked {
300 if (c.isDatabaseLocal() == false)
305 Vector<Booking> book = new Vector<Booking>() ;
309 if (c.isDatabaseLocal() == false)
312 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
313 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
314 ObjectSet<RuralHouse> result = db.queryByExample(proto);
315 RuralHouse rh = (RuralHouse) result.next();
318 offer = rh.findOffer(firstDate, lastDate);
321 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
322 db.store(theDB4oManagerAux); // To store the new value for
327 book = offer.getBookings();
331 } catch (com.db4o.ext.ObjectNotStorableException e) {
333 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
334 } catch (Exception exc) {
335 exc.printStackTrace();
343 * This method existing owners
346 public Vector<Owner> getOwners() throws RemoteException, Exception {
348 if (c.isDatabaseLocal() == false)
354 Owner proto = new Owner(null, null, null);
355 ObjectSet<Owner> result = db.queryByExample(proto);
356 Vector<Owner> owners = new Vector<Owner>();
357 while (result.hasNext())
358 owners.add((Owner) result.next());
365 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
368 if (c.isDatabaseLocal() == false)
374 RuralHouse proto = new RuralHouse(null, null, null, null, null);
375 ObjectSet<RuralHouse> result = db.queryByExample(proto);
376 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
377 while (result.hasNext())
378 ruralHouses.add((RuralHouse) result.next());
385 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
386 Date lastDay) throws RemoteException, OverlappingOfferExists {
388 if (c.isDatabaseLocal() == false)
395 RuralHouse rhn = (RuralHouse) db.queryByExample(
396 new RuralHouse(rh.getHouseName(), null, null, null, null))
398 if (rhn.overlapsWith(firstDay, lastDay) != null)
399 throw new OverlappingOfferExists();
407 public static ObjectContainer getContainer() {
411 public void close() {
413 System.out.println("DataBase closed");
416 public String toString() {
417 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
424 * @throws RemoteException
427 public Vector<Account> getAccount(Account proto) throws RemoteException,
430 if (c.isDatabaseLocal() == false)
436 ObjectSet<Account> result = db.queryByExample(proto);
437 Vector<Account> accounts = new Vector<Account>();
438 while (result.hasNext())
439 accounts.add((Account) result.next());
449 public boolean storeRuralHouses(RuralHouse rh) {
451 if (c.isDatabaseLocal() == false)
456 boolean stored = false;
457 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
460 ObjectSet<RuralHouse> result = db.queryByExample(house);
461 if (result.isEmpty()) {
462 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
464 ow.addRuralHouse(rh);
469 db.delete(result.get(0));
480 public void removeHouse(RuralHouse rh, Owner owner) {
482 if (c.isDatabaseLocal() == false)
487 ObjectSet<Owner> result = db.queryByExample(owner);
488 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
489 if (!rhs.isEmpty()) {
490 Owner found = result.get(0);
491 found.getRuralHouses().remove(rhs.get(0));
492 db.delete(rhs.get(0));
496 } catch (Exception exc) {
497 exc.printStackTrace();
504 public Vector<RuralHouse> getRuralHouses(String name, String town,
505 int nBed, int nKit, int nBath, int nPark, int nLiv) {
506 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
507 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
508 if (c.isDatabaseLocal() == false)
514 ObjectSet<RuralHouse> result = db.queryByExample(rh);
515 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
516 while (result.hasNext())
517 ruralHouses.add(result.next());
520 } catch (NullPointerException e) {
526 public boolean addAccount(Account acc) {
527 if (c.isDatabaseLocal() == false)
533 // TODO realize if there is another account with same username.
534 // Quite difficult with the f***ing salt
537 } catch (Exception exc) {
538 exc.printStackTrace();
545 // TODO remove account
547 public boolean removeAccount(Account acc) {
551 //TODO this method should be improved.
552 public void acceptBooking(Offer of){
553 Offer off = new Offer(of.getOfferNumber(),of.getRuralHouse(),of.getFirstDay(),of.getLastDay(),of.getPrice());
554 if (c.isDatabaseLocal() == false)
560 ObjectSet<Offer> result = db.queryByExample(off);
561 this.deleteOffer(result.get(0));
565 } catch (Exception e) {
566 e.printStackTrace();;
570 public void removeBooking(Booking b){
571 if (c.isDatabaseLocal() == false)
576 ObjectSet<Booking> result = db.queryByExample(b);
577 ObjectSet<Client> result2= db.queryByExample(b.getClient());
578 db.delete(result.get(0));
579 db.delete(result2.get(0));
581 } catch (Exception e) {
582 e.printStackTrace();;