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(Offer.class)
89 .cascadeOnDelete(true);
90 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
91 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
94 private void openSDB() {
96 configurationCS = Db4oClientServer.newClientConfiguration();
97 configurationCS.common().activationDepth(c.getActivationDepth());
98 configurationCS.common().updateDepth(c.getUpdateDepth());
99 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
100 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
101 c.getDatabasePort(), c.getUser(), c.getPassword());
105 class DB4oManagerAux {
109 DB4oManagerAux(int bookingNumber, int offerNumber) {
110 this.bookingNumber = bookingNumber;
111 this.offerNumber = offerNumber;
115 public static DB4oManager getInstance() throws Exception {
116 if (theDB4oManager == null)
117 theDB4oManager = new DB4oManager();
118 return theDB4oManager;
121 public void initializeDB() {
124 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
126 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
127 "alfredo@gmail.com");
128 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
130 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
132 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
135 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
136 Account jonAcc = new Account("1", "1", jon);
137 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
140 Account admin = new Account("admin", "admin", true);
141 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.getAllOffers().remove(of.get(0)));
216 } catch (com.db4o.ext.ObjectNotStorableException e) {
218 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
224 public Administrator getAdminData() {
225 if (c.isDatabaseLocal() == false)
232 List<Administrator> admL = db.query(new Predicate<Administrator>() {
233 private static final long serialVersionUID = 1L;
235 public boolean match(Administrator admin) {
248 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());
276 } catch (Exception e) {
285 * This method creates a book with a corresponding parameters
288 * day, last day, house number and telephone
291 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
292 Date lastDate, Client cl) throws OfferCanNotBeBooked {
294 if (c.isDatabaseLocal() == false)
299 Vector<Booking> book = new Vector<Booking>();
303 if (c.isDatabaseLocal() == false)
306 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
307 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
308 ObjectSet<RuralHouse> result = db.queryByExample(proto);
309 RuralHouse rh = (RuralHouse) result.next();
312 offer = rh.findOffer(firstDate, lastDate);
315 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
316 db.store(theDB4oManagerAux); // To store the new value for
321 book = offer.getBookings();
325 } catch (com.db4o.ext.ObjectNotStorableException e) {
327 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
328 } catch (Exception exc) {
329 exc.printStackTrace();
337 * This method existing owners
340 public Vector<Owner> getOwners() throws RemoteException, Exception {
342 if (c.isDatabaseLocal() == false)
348 Owner proto = new Owner(null, null, null);
349 ObjectSet<Owner> result = db.queryByExample(proto);
350 Vector<Owner> owners = new Vector<Owner>();
351 while (result.hasNext())
352 owners.add((Owner) result.next());
359 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
362 if (c.isDatabaseLocal() == false)
368 RuralHouse proto = new RuralHouse(null, null, null, null, null);
369 ObjectSet<RuralHouse> result = db.queryByExample(proto);
370 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
371 while (result.hasNext())
372 ruralHouses.add((RuralHouse) result.next());
379 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
380 Date lastDay) throws RemoteException, OverlappingOfferExists {
382 if (c.isDatabaseLocal() == false)
389 RuralHouse rhn = (RuralHouse) db.queryByExample(
390 new RuralHouse(rh.getHouseName(), null, null, null, null))
392 if (rhn.overlapsWith(firstDay, lastDay) != null)
393 throw new OverlappingOfferExists();
401 public static ObjectContainer getContainer() {
405 public void close() {
407 System.out.println("DataBase closed");
410 public String toString() {
411 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
418 * @throws RemoteException
421 public Vector<Account> getAccount(Account proto) throws RemoteException,
424 if (c.isDatabaseLocal() == false)
430 ObjectSet<Account> result = db.queryByExample(proto);
431 Vector<Account> accounts = new Vector<Account>();
432 while (result.hasNext())
433 accounts.add((Account) result.next());
443 public boolean storeRuralHouses(RuralHouse rh) {
445 if (c.isDatabaseLocal() == false)
450 boolean stored = false;
451 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
454 ObjectSet<RuralHouse> result = db.queryByExample(house);
455 if (result.isEmpty()) {
456 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
458 ow.addRuralHouse(rh);
463 db.delete(result.get(0));
474 public void removeHouse(RuralHouse rh, Owner owner) {
476 if (c.isDatabaseLocal() == false)
481 ObjectSet<Owner> result = db.queryByExample(owner);
482 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
483 if (!rhs.isEmpty()) {
484 Owner found = result.get(0);
485 found.getRuralHouses().remove(rhs.get(0));
486 db.delete(rhs.get(0));
490 } catch (Exception exc) {
491 exc.printStackTrace();
498 public Vector<RuralHouse> getRuralHouses(String name, String town,
499 int nBed, int nKit, int nBath, int nPark, int nLiv) {
500 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
501 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
502 if (c.isDatabaseLocal() == false)
508 ObjectSet<RuralHouse> result = db.queryByExample(rh);
509 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
510 while (result.hasNext())
511 ruralHouses.add(result.next());
514 } catch (NullPointerException e) {
520 public boolean addAccount(Account acc) {
521 if (c.isDatabaseLocal() == false)
527 ObjectSet<Account> result = db.queryByExample(new Account(acc
529 if (result.isEmpty()) {
534 } catch (Exception exc) {
535 exc.printStackTrace();
542 // TODO remove account
544 public boolean removeAccount(Account acc) {
545 if (c.isDatabaseLocal() == false)
551 ObjectSet<Account> result = db.queryByExample(new Account(acc
553 if (!result.isEmpty()) {
554 db.delete(result.get(0));
559 } catch (Exception exc) {
560 exc.printStackTrace();
567 public void acceptBooking(Offer of) {
568 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
569 .getRuralHouse().getHouseName(), null, null, null, null), null,
571 if (c.isDatabaseLocal() == false)
577 ObjectSet<Offer> result = db.queryByExample(off);
578 db.delete(result.get(0));
579 RuralHouse rh = result.get(0).getRuralHouse();
580 of.setRuralHouse(rh);
581 rh.getAllOffers().remove(result.get(0));
582 rh.getAllOffers().add(of);
586 } catch (Exception e) {
592 public void removeBooking(Booking b) {
593 if (c.isDatabaseLocal() == false)
598 ObjectSet<Booking> result = db.queryByExample(b);
599 result.get(0).getOffer().getBookings().remove(b);
600 db.store(result.get(0).getOffer());
602 } catch (Exception e) {