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",
138 Account admin = new Account("admin", "admin", true);
139 db.store(Administrator.getInstance());
141 db.store(alfredoAcc);
149 public void deleteDB() {
151 if (c.isDatabaseLocal() == false)
157 Owner proto = new Owner(null, null, null);
158 ObjectSet<Owner> result = db.queryByExample(proto);
159 while (result.hasNext()) {
160 Owner o = (Owner) result.next();
161 System.out.println("Deleted owner: " + o.toString());
170 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
171 Date lastDay, float price) throws RemoteException, Exception {
174 if (c.isDatabaseLocal() == false)
181 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
183 ObjectSet<RuralHouse> result = db.queryByExample(proto);
184 RuralHouse rh = (RuralHouse) result.next();
185 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
187 db.store(theDB4oManagerAux); // To store the new value for
192 } catch (com.db4o.ext.ObjectNotStorableException e) {
194 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
201 public void deleteOffer(Offer offer) throws RemoteException, Exception {
202 if (c.isDatabaseLocal() == false)
208 ObjectSet<Offer> of = db.queryByExample(offer);
209 RuralHouse rh = of.get(0).getRuralHouse();
210 System.out.println(rh.offers.remove(of.get(0)));
214 } catch (com.db4o.ext.ObjectNotStorableException e) {
216 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
222 public Administrator getAdminData() {
223 if (c.isDatabaseLocal() == false)
230 List<Administrator> admL = db.query(new Predicate<Administrator>() {
234 private static final long serialVersionUID = 1L;
236 public boolean match(Administrator admin) {
249 public void storeAdmin() {
250 if (c.isDatabaseLocal() == false)
256 List<Administrator> admL = db.query(new Predicate<Administrator>() {
260 private static final long serialVersionUID = 1L;
262 public boolean match(Administrator admin) {
267 admL.get(0).setAddRequest(
268 Administrator.getInstance().getAddRequest());
269 admL.get(0).setRemoveRequest(
270 Administrator.getInstance().getRemoveRequest());
271 admL.get(0).setNewOwnerRequest(
272 Administrator.getInstance().getNewOwnerRequest());
275 } catch (Exception e) {
284 * This method creates a book with a corresponding parameters
287 * day, last day, house number and telephone
290 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
291 Date lastDate, Client cl) throws OfferCanNotBeBooked {
293 if (c.isDatabaseLocal() == false)
298 Vector<Booking> book = new Vector<Booking>() ;
302 if (c.isDatabaseLocal() == false)
305 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
306 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
307 ObjectSet<RuralHouse> result = db.queryByExample(proto);
308 RuralHouse rh = (RuralHouse) result.next();
311 offer = rh.findOffer(firstDate, lastDate);
314 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
315 db.store(theDB4oManagerAux); // To store the new value for
320 book = offer.getBookings();
324 } catch (com.db4o.ext.ObjectNotStorableException e) {
326 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
327 } catch (Exception exc) {
328 exc.printStackTrace();
336 * This method existing owners
339 public Vector<Owner> getOwners() throws RemoteException, Exception {
341 if (c.isDatabaseLocal() == false)
347 Owner proto = new Owner(null, null, null);
348 ObjectSet<Owner> result = db.queryByExample(proto);
349 Vector<Owner> owners = new Vector<Owner>();
350 while (result.hasNext())
351 owners.add((Owner) result.next());
358 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
361 if (c.isDatabaseLocal() == false)
367 RuralHouse proto = new RuralHouse(null, null, null, null, null);
368 ObjectSet<RuralHouse> result = db.queryByExample(proto);
369 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
370 while (result.hasNext())
371 ruralHouses.add((RuralHouse) result.next());
378 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
379 Date lastDay) throws RemoteException, OverlappingOfferExists {
381 if (c.isDatabaseLocal() == false)
388 RuralHouse rhn = (RuralHouse) db.queryByExample(
389 new RuralHouse(rh.getHouseName(), null, null, null, null))
391 if (rhn.overlapsWith(firstDay, lastDay) != null)
392 throw new OverlappingOfferExists();
400 public static ObjectContainer getContainer() {
404 public void close() {
406 System.out.println("DataBase closed");
409 public String toString() {
410 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
417 * @throws RemoteException
420 public Vector<Account> getAccount(Account proto) throws RemoteException,
423 if (c.isDatabaseLocal() == false)
429 ObjectSet<Account> result = db.queryByExample(proto);
430 Vector<Account> accounts = new Vector<Account>();
431 while (result.hasNext())
432 accounts.add((Account) result.next());
442 public boolean storeRuralHouses(RuralHouse rh) {
444 if (c.isDatabaseLocal() == false)
449 boolean stored = false;
450 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
453 ObjectSet<RuralHouse> result = db.queryByExample(house);
454 if (result.isEmpty()) {
455 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
457 ow.addRuralHouse(rh);
462 db.delete(result.get(0));
473 public void removeHouse(RuralHouse rh, Owner owner) {
475 if (c.isDatabaseLocal() == false)
480 ObjectSet<Owner> result = db.queryByExample(owner);
481 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
482 if (!rhs.isEmpty()) {
483 Owner found = result.get(0);
484 found.getRuralHouses().remove(rhs.get(0));
485 db.delete(rhs.get(0));
489 } catch (Exception exc) {
490 exc.printStackTrace();
497 public Vector<RuralHouse> getRuralHouses(String name, String town,
498 int nBed, int nKit, int nBath, int nPark, int nLiv) {
499 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
500 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
501 if (c.isDatabaseLocal() == false)
507 ObjectSet<RuralHouse> result = db.queryByExample(rh);
508 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
509 while (result.hasNext())
510 ruralHouses.add(result.next());
513 } catch (NullPointerException e) {
519 public boolean addAccount(Account acc) {
520 if (c.isDatabaseLocal() == false)
526 // TODO realize if there is another account with same username.
527 // Quite difficult with the f***ing salt
530 } catch (Exception exc) {
531 exc.printStackTrace();
538 // TODO remove account
540 public boolean removeAccount(Account acc) {
544 //TODO this method should be improved.
545 public void acceptBooking(Offer of){
546 Offer off = new Offer(of.getOfferNumber(),of.getRuralHouse(),of.getFirstDay(),of.getLastDay(),of.getPrice());
547 if (c.isDatabaseLocal() == false)
553 ObjectSet<Offer> result = db.queryByExample(off);
554 this.deleteOffer(result.get(0));
558 } catch (Exception e) {
559 e.printStackTrace();;
563 public void removeBooking(Booking b){
564 if (c.isDatabaseLocal() == false)
569 ObjectSet<Booking> result = db.queryByExample(b);
570 ObjectSet<Client> result2= db.queryByExample(b.getClient());
571 db.delete(result.get(0));
572 db.delete(result2.get(0));
574 } catch (Exception e) {
575 e.printStackTrace();;