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 Vector<Offer> getRHsOffer(String name){
223 if (c.isDatabaseLocal() == false)
229 RuralHouse rh = (RuralHouse)db.queryByExample(new RuralHouse(name, null, null, null, null)).get(0);
230 Offer proto = new Offer(0, rh, null, null, 0);
231 ObjectSet<Offer> result = db.queryByExample(proto);
232 return new Vector<Offer>(result);
238 public Administrator getAdminData(){
240 if (c.isDatabaseLocal() == false)
247 List<Administrator> admL = db.query(new Predicate<Administrator>() {
248 private static final long serialVersionUID = 1L;
250 public boolean match(Administrator admin) {
263 public void storeAdmin() {
265 if (c.isDatabaseLocal() == false)
271 List<Administrator> admL = db.query(new Predicate<Administrator>() {
275 private static final long serialVersionUID = 1L;
277 public boolean match(Administrator admin) {
282 admL.get(0).setAddRequest(
283 Administrator.getInstance().getAddRequest());
284 admL.get(0).setRemoveRequest(
285 Administrator.getInstance().getRemoveRequest());
286 admL.get(0).setNewOwnerRequest(
287 Administrator.getInstance().getNewOwnerRequest());
291 } catch (Exception e) {
300 * This method creates a book with a corresponding parameters
303 * day, last day, house number and telephone
306 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
307 Date lastDate, Client cl) throws OfferCanNotBeBooked {
309 if (c.isDatabaseLocal() == false)
314 Vector<Booking> book = new Vector<Booking>();
318 if (c.isDatabaseLocal() == false)
321 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
322 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
323 ObjectSet<RuralHouse> result = db.queryByExample(proto);
324 RuralHouse rh = (RuralHouse) result.next();
327 offer = rh.findOffer(firstDate, lastDate);
330 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
331 db.store(theDB4oManagerAux); // To store the new value for
336 book = offer.getBookings();
340 } catch (com.db4o.ext.ObjectNotStorableException e) {
342 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
343 } catch (Exception exc) {
344 exc.printStackTrace();
352 * This method existing owners
355 public Vector<Owner> getOwners() throws RemoteException, Exception {
357 if (c.isDatabaseLocal() == false)
363 Owner proto = new Owner(null, null, null);
364 ObjectSet<Owner> result = db.queryByExample(proto);
365 Vector<Owner> owners = new Vector<Owner>();
366 while (result.hasNext())
367 owners.add((Owner) result.next());
375 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
378 if (c.isDatabaseLocal() == false)
384 RuralHouse proto = new RuralHouse(null, null, null, null, null);
385 ObjectSet<RuralHouse> result = db.queryByExample(proto);
386 return new Vector<RuralHouse>(result);
392 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
393 Date lastDay) throws RemoteException, OverlappingOfferExists {
395 if (c.isDatabaseLocal() == false)
402 RuralHouse rhn = (RuralHouse) db.queryByExample(
403 new RuralHouse(rh.getHouseName(), null, null, null, null))
405 if (rhn.overlapsWith(firstDay, lastDay) != null)
406 throw new OverlappingOfferExists();
414 public static ObjectContainer getContainer() {
418 public void close() {
420 System.out.println("DataBase closed");
423 public String toString() {
424 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
431 * @throws RemoteException
434 public Vector<Account> getAccount(Account proto) throws RemoteException,
437 if (c.isDatabaseLocal() == false)
443 ObjectSet<Account> result = db.queryByExample(proto);
444 Vector<Account> accounts = new Vector<Account>();
445 while (result.hasNext())
446 accounts.add((Account) result.next());
456 public boolean storeRuralHouses(RuralHouse rh) {
458 if (c.isDatabaseLocal() == false)
463 boolean stored = false;
464 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
467 ObjectSet<RuralHouse> result = db.queryByExample(house);
468 if (result.isEmpty()) {
469 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
471 ow.addRuralHouse(rh);
476 db.delete(result.get(0));
487 public void removeHouse(RuralHouse rh, Owner owner) {
489 if (c.isDatabaseLocal() == false)
494 ObjectSet<Owner> result = db.queryByExample(owner);
495 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
496 if (!rhs.isEmpty()) {
497 Owner found = result.get(0);
498 found.getRuralHouses().remove(rhs.get(0));
499 db.delete(rhs.get(0));
503 } catch (Exception exc) {
504 exc.printStackTrace();
511 public Vector<RuralHouse> getRuralHouses(Owner ow, String name, String town,
512 int nBed, int nKit, int nBath, int nPark, int nLiv) {
513 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
514 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
515 if (c.isDatabaseLocal() == false)
521 ObjectSet<RuralHouse> result = db.queryByExample(rh);
522 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
523 while (result.hasNext())
524 ruralHouses.add(result.next());
527 } catch (NullPointerException e) {
533 public boolean addAccount(Account acc) {
534 if (c.isDatabaseLocal() == false)
540 ObjectSet<Account> result = db.queryByExample(new Account(acc
542 if (result.isEmpty()) {
547 } catch (Exception exc) {
548 exc.printStackTrace();
555 // TODO remove account
557 public boolean removeAccount(Account acc) {
558 if (c.isDatabaseLocal() == false)
564 ObjectSet<Account> result = db.queryByExample(new Account(acc
566 if (!result.isEmpty()) {
567 db.delete(result.get(0));
572 } catch (Exception exc) {
573 exc.printStackTrace();
580 // TODO this method should be improved.
581 public void acceptBooking(Offer of) {
582 Offer off = new Offer(of.getOfferNumber(), of.getRuralHouse(),
583 of.getFirstDay(), of.getLastDay(), of.getPrice());
584 if (c.isDatabaseLocal() == false)
590 ObjectSet<Offer> result = db.queryByExample(off);
591 this.deleteOffer(result.get(0));
595 } catch (Exception e) {
601 public void removeBooking(Booking b) {
602 if (c.isDatabaseLocal() == false)
607 ObjectSet<Booking> result = db.queryByExample(b);
608 ObjectSet<Client> result2 = db.queryByExample(b.getClient());
609 db.delete(result.get(0));
610 db.delete(result2.get(0));
612 } catch (Exception e) {