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>() {
231 private static final long serialVersionUID = 1L;
233 public boolean match(Administrator admin) {
246 public void storeAdmin() {
248 if (c.isDatabaseLocal() == false)
254 List<Administrator> admL = db.query(new Predicate<Administrator>() {
258 private static final long serialVersionUID = 1L;
260 public boolean match(Administrator admin) {
265 admL.get(0).setAddRequest(
266 Administrator.getInstance().getAddRequest());
267 admL.get(0).setRemoveRequest(
268 Administrator.getInstance().getRemoveRequest());
269 admL.get(0).setNewOwnerRequest(
270 Administrator.getInstance().getNewOwnerRequest());
274 } catch (Exception e) {
283 * This method creates a book with a corresponding parameters
286 * day, last day, house number and telephone
289 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
290 Date lastDate, Client cl) throws OfferCanNotBeBooked {
292 if (c.isDatabaseLocal() == false)
297 Vector<Booking> book = new Vector<Booking>();
301 if (c.isDatabaseLocal() == false)
304 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
305 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
306 ObjectSet<RuralHouse> result = db.queryByExample(proto);
307 RuralHouse rh = (RuralHouse) result.next();
310 offer = rh.findOffer(firstDate, lastDate);
313 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
314 db.store(theDB4oManagerAux); // To store the new value for
319 book = offer.getBookings();
323 } catch (com.db4o.ext.ObjectNotStorableException e) {
325 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
326 } catch (Exception exc) {
327 exc.printStackTrace();
335 * This method existing owners
338 public Vector<Owner> getOwners() throws RemoteException, Exception {
340 if (c.isDatabaseLocal() == false)
346 Owner proto = new Owner(null, null, null);
347 ObjectSet<Owner> result = db.queryByExample(proto);
348 Vector<Owner> owners = new Vector<Owner>();
349 while (result.hasNext())
350 owners.add((Owner) result.next());
357 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
360 if (c.isDatabaseLocal() == false)
366 RuralHouse proto = new RuralHouse(null, null, null, null, null);
367 ObjectSet<RuralHouse> result = db.queryByExample(proto);
368 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
369 while (result.hasNext())
370 ruralHouses.add((RuralHouse) result.next());
377 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
378 Date lastDay) throws RemoteException, OverlappingOfferExists {
380 if (c.isDatabaseLocal() == false)
387 RuralHouse rhn = (RuralHouse) db.queryByExample(
388 new RuralHouse(rh.getHouseName(), null, null, null, null))
390 if (rhn.overlapsWith(firstDay, lastDay) != null)
391 throw new OverlappingOfferExists();
399 public static ObjectContainer getContainer() {
403 public void close() {
405 System.out.println("DataBase closed");
408 public String toString() {
409 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
416 * @throws RemoteException
419 public Vector<Account> getAccount(Account proto) throws RemoteException,
422 if (c.isDatabaseLocal() == false)
428 ObjectSet<Account> result = db.queryByExample(proto);
429 Vector<Account> accounts = new Vector<Account>();
430 while (result.hasNext())
431 accounts.add((Account) result.next());
441 public boolean storeRuralHouses(RuralHouse rh) {
443 if (c.isDatabaseLocal() == false)
448 boolean stored = false;
449 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
452 ObjectSet<RuralHouse> result = db.queryByExample(house);
453 if (result.isEmpty()) {
454 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
456 ow.addRuralHouse(rh);
461 db.delete(result.get(0));
472 public void removeHouse(RuralHouse rh, Owner owner) {
474 if (c.isDatabaseLocal() == false)
479 ObjectSet<Owner> result = db.queryByExample(owner);
480 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
481 if (!rhs.isEmpty()) {
482 Owner found = result.get(0);
483 found.getRuralHouses().remove(rhs.get(0));
484 db.delete(rhs.get(0));
488 } catch (Exception exc) {
489 exc.printStackTrace();
496 public Vector<RuralHouse> getRuralHouses(String name, String town,
497 int nBed, int nKit, int nBath, int nPark, int nLiv) {
498 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
499 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
500 if (c.isDatabaseLocal() == false)
506 ObjectSet<RuralHouse> result = db.queryByExample(rh);
507 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
508 while (result.hasNext())
509 ruralHouses.add(result.next());
512 } catch (NullPointerException e) {
518 public boolean addAccount(Account acc) {
519 if (c.isDatabaseLocal() == false)
525 ObjectSet<Account> result = db.queryByExample(new Account(acc
527 if (result.isEmpty()) {
532 } catch (Exception exc) {
533 exc.printStackTrace();
540 // TODO remove account
542 public boolean removeAccount(Account acc) {
543 if (c.isDatabaseLocal() == false)
549 ObjectSet<Account> result = db.queryByExample(new Account(acc
551 if (!result.isEmpty()) {
552 db.delete(result.get(0));
557 } catch (Exception exc) {
558 exc.printStackTrace();
565 // TODO this method should be improved.
566 public void acceptBooking(Offer of) {
567 Offer off = new Offer(of.getOfferNumber(), of.getRuralHouse(),
568 of.getFirstDay(), of.getLastDay(), of.getPrice());
569 if (c.isDatabaseLocal() == false)
575 ObjectSet<Offer> result = db.queryByExample(off);
576 this.deleteOffer(result.get(0));
580 } catch (Exception e) {
586 public void removeBooking(Booking b) {
587 if (c.isDatabaseLocal() == false)
592 ObjectSet<Booking> result = db.queryByExample(b);
593 ObjectSet<Client> result2 = db.queryByExample(b.getClient());
594 db.delete(result.get(0));
595 db.delete(result2.get(0));
597 } catch (Exception e) {