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,
323 ObjectSet<RuralHouse> result = db.queryByExample(proto);
324 RuralHouse rh = (RuralHouse) result.next();
327 offer = (Offer)db.queryByExample(new Offer(0, rh, firstDate, lastDate, 0)).get(0);
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());
374 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
375 Date lastDay) throws RemoteException, OverlappingOfferExists {
377 if (c.isDatabaseLocal() == false)
384 RuralHouse rhn = (RuralHouse) db.queryByExample(
385 new RuralHouse(rh.getHouseName(), null, null, null, null))
387 if (rhn.overlapsWith(firstDay, lastDay) != null)
388 throw new OverlappingOfferExists();
396 public void close() {
398 System.out.println("DataBase closed");
401 public String toString() {
402 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
409 * @throws RemoteException
412 public Vector<Account> getAccount(Account proto) throws RemoteException,
415 if (c.isDatabaseLocal() == false)
421 ObjectSet<Account> result = db.queryByExample(proto);
422 Vector<Account> accounts = new Vector<Account>();
423 while (result.hasNext())
424 accounts.add((Account) result.next());
434 public boolean storeRuralHouses(RuralHouse rh) {
436 if (c.isDatabaseLocal() == false)
441 boolean stored = false;
442 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
445 ObjectSet<RuralHouse> result = db.queryByExample(house);
446 if (result.isEmpty()) {
447 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
449 ow.addRuralHouse(rh);
454 db.delete(result.get(0));
465 public void removeHouse(RuralHouse rh, Owner owner) {
467 if (c.isDatabaseLocal() == false)
472 ObjectSet<Owner> result = db.queryByExample(owner);
473 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
474 if (!rhs.isEmpty()) {
475 Owner found = result.get(0);
476 found.getRuralHouses().remove(rhs.get(0));
477 db.delete(rhs.get(0));
481 } catch (Exception exc) {
482 exc.printStackTrace();
489 public Vector<RuralHouse> getRuralHouses(Owner ow, String name, String town,
490 int nBed, int nKit, int nBath, int nPark, int nLiv) {
491 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
492 RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
493 if (c.isDatabaseLocal() == false)
499 ObjectSet<RuralHouse> result = db.queryByExample(rh);
500 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
501 while (result.hasNext())
502 ruralHouses.add(result.next());
505 } catch (NullPointerException e) {
511 public boolean addAccount(Account acc) {
512 if (c.isDatabaseLocal() == false)
518 ObjectSet<Account> result = db.queryByExample(new Account(acc
520 if (result.isEmpty()) {
525 } catch (Exception exc) {
526 exc.printStackTrace();
533 // TODO remove account
535 public boolean removeAccount(Account acc) {
536 if (c.isDatabaseLocal() == false)
542 ObjectSet<Account> result = db.queryByExample(new Account(acc
544 if (!result.isEmpty()) {
545 db.delete(result.get(0));
550 } catch (Exception exc) {
551 exc.printStackTrace();
558 // TODO this method should be improved.
559 public void acceptBooking(Offer of) {
560 Offer off = new Offer(of.getOfferNumber(), of.getRuralHouse(),
561 of.getFirstDay(), of.getLastDay(), of.getPrice());
562 if (c.isDatabaseLocal() == false)
568 ObjectSet<Offer> result = db.queryByExample(off);
569 this.deleteOffer(result.get(0));
573 } catch (Exception e) {
579 public void removeBooking(Booking b) {
580 if (c.isDatabaseLocal() == false)
585 ObjectSet<Booking> result = db.queryByExample(b);
586 ObjectSet<Client> result2 = db.queryByExample(b.getClient());
587 db.delete(result.get(0));
588 db.delete(result2.get(0));
590 } catch (Exception e) {