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(Account.class)
89 .cascadeOnDelete(true);
90 configuration.common().objectClass(Offer.class).cascadeOnDelete(true);
91 configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
92 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
95 private void openSDB() {
97 configurationCS = Db4oClientServer.newClientConfiguration();
98 configurationCS.common().activationDepth(c.getActivationDepth());
99 configurationCS.common().updateDepth(c.getUpdateDepth());
100 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
101 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
102 c.getDatabasePort(), c.getUser(), c.getPassword());
106 class DB4oManagerAux {
110 DB4oManagerAux(int bookingNumber, int offerNumber) {
111 this.bookingNumber = bookingNumber;
112 this.offerNumber = offerNumber;
116 public static DB4oManager getInstance() throws Exception {
117 if (theDB4oManager == null)
118 theDB4oManager = new DB4oManager();
119 return theDB4oManager;
122 public void initializeDB() {
125 Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
127 Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
128 "alfredo@gmail.com");
129 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
131 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
133 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
136 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
137 Account jonAcc = new Account("1", "1", jon);
138 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
141 Account admin = new Account("admin", "admin", true);
142 db.store(Administrator.getInstance());
144 db.store(alfredoAcc);
152 public void deleteDB() {
154 if (c.isDatabaseLocal() == false)
160 Owner proto = new Owner(null, null, null);
161 ObjectSet<Owner> result = db.queryByExample(proto);
162 while (result.hasNext()) {
163 Owner o = (Owner) result.next();
164 System.out.println("Deleted owner: " + o.toString());
173 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
174 Date lastDay, float price) throws RemoteException, Exception {
177 if (c.isDatabaseLocal() == false)
184 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
186 ObjectSet<RuralHouse> result = db.queryByExample(proto);
187 RuralHouse rh = (RuralHouse) result.next();
188 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
190 db.store(theDB4oManagerAux); // To store the new value for
195 } catch (com.db4o.ext.ObjectNotStorableException e) {
197 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
204 public void deleteOffer(Offer offer) throws RemoteException, Exception {
205 if (c.isDatabaseLocal() == false)
211 ObjectSet<Offer> of = db.queryByExample(offer);
212 RuralHouse rh = of.get(0).getRuralHouse();
213 System.out.println(rh.getAllOffers().remove(of.get(0)));
217 } catch (com.db4o.ext.ObjectNotStorableException e) {
219 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
225 public Administrator getAdminData() {
226 if (c.isDatabaseLocal() == false)
233 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() {
251 if (c.isDatabaseLocal() == false)
257 List<Administrator> admL = db.query(new Predicate<Administrator>() {
261 private static final long serialVersionUID = 1L;
263 public boolean match(Administrator admin) {
268 admL.get(0).setAddRequest(
269 Administrator.getInstance().getAddRequest());
270 admL.get(0).setRemoveRequest(
271 Administrator.getInstance().getRemoveRequest());
272 admL.get(0).setNewOwnerRequest(
273 Administrator.getInstance().getNewOwnerRequest());
277 } catch (Exception e) {
286 * This method creates a book with a corresponding parameters
289 * day, last day, house number and telephone
292 public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
293 Date lastDate, Client cl) throws OfferCanNotBeBooked {
295 if (c.isDatabaseLocal() == false)
300 Vector<Booking> book = new Vector<Booking>();
304 if (c.isDatabaseLocal() == false)
307 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
308 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
309 ObjectSet<RuralHouse> result = db.queryByExample(proto);
310 RuralHouse rh = (RuralHouse) result.next();
313 offer = rh.findOffer(firstDate, lastDate);
316 offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
317 db.store(theDB4oManagerAux); // To store the new value for
322 book = offer.getBookings();
326 } catch (com.db4o.ext.ObjectNotStorableException e) {
328 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
329 } catch (Exception exc) {
330 exc.printStackTrace();
338 * This method existing owners
341 public Vector<Owner> getOwners() throws RemoteException, Exception {
343 if (c.isDatabaseLocal() == false)
349 Owner proto = new Owner(null, null, null);
350 ObjectSet<Owner> result = db.queryByExample(proto);
351 Vector<Owner> owners = new Vector<Owner>();
352 while (result.hasNext())
353 owners.add((Owner) result.next());
360 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
363 if (c.isDatabaseLocal() == false)
369 RuralHouse proto = new RuralHouse(null, null, null, null, null);
370 ObjectSet<RuralHouse> result = db.queryByExample(proto);
371 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
372 while (result.hasNext())
373 ruralHouses.add((RuralHouse) result.next());
380 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
381 Date lastDay) throws RemoteException, OverlappingOfferExists {
383 if (c.isDatabaseLocal() == false)
390 RuralHouse rhn = (RuralHouse) db.queryByExample(
391 new RuralHouse(rh.getHouseName(), null, null, null, null))
393 if (rhn.overlapsWith(firstDay, lastDay) != null)
394 throw new OverlappingOfferExists();
402 public static ObjectContainer getContainer() {
406 public void close() {
408 System.out.println("DataBase closed");
411 public String toString() {
412 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
419 * @throws RemoteException
422 public Vector<Account> getAccount(Account proto) throws RemoteException,
425 if (c.isDatabaseLocal() == false)
431 ObjectSet<Account> result = db.queryByExample(proto);
432 Vector<Account> accounts = new Vector<Account>();
433 while (result.hasNext())
434 accounts.add((Account) result.next());
444 public boolean storeRuralHouses(RuralHouse rh) {
446 if (c.isDatabaseLocal() == false)
451 boolean stored = false;
452 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
455 ObjectSet<RuralHouse> result = db.queryByExample(house);
456 if (result.isEmpty()) {
457 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
459 ow.addRuralHouse(rh);
464 db.delete(result.get(0));
475 public void removeHouse(RuralHouse rh, Owner owner) {
477 if (c.isDatabaseLocal() == false)
482 ObjectSet<Owner> result = db.queryByExample(owner);
483 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
484 if (!rhs.isEmpty()) {
485 Owner found = result.get(0);
486 found.getRuralHouses().remove(rhs.get(0));
487 db.delete(rhs.get(0));
491 } catch (Exception exc) {
492 exc.printStackTrace();
499 public Vector<RuralHouse> getRuralHouses(String name, String town,
500 int nBed, int nKit, int nBath, int nPark, int nLiv) {
501 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
502 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
503 if (c.isDatabaseLocal() == false)
509 ObjectSet<RuralHouse> result = db.queryByExample(rh);
510 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
511 while (result.hasNext())
512 ruralHouses.add(result.next());
515 } catch (NullPointerException e) {
521 public boolean addAccount(Account acc) {
522 if (c.isDatabaseLocal() == false)
528 ObjectSet<Account> result = db.queryByExample(new Account(acc
530 if (result.isEmpty()) {
535 } catch (Exception exc) {
536 exc.printStackTrace();
543 public boolean removeAccount(Owner own) {
544 if (c.isDatabaseLocal() == false)
550 ObjectSet<Account> result = db.queryByExample(new Account(own));
551 if (!result.isEmpty()) {
552 db.delete(result.get(0));
556 } catch (Exception exc) {
557 exc.printStackTrace();
564 public void acceptBooking(Offer of) {
565 Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
566 .getRuralHouse().getHouseName(), null, null, null, null), null,
568 if (c.isDatabaseLocal() == false)
574 ObjectSet<Offer> result = db.queryByExample(off);
575 db.delete(result.get(0));
576 RuralHouse rh = result.get(0).getRuralHouse();
577 of.setRuralHouse(rh);
578 rh.getAllOffers().remove(result.get(0));
579 rh.getAllOffers().add(of);
583 } catch (Exception e) {
589 public void removeBooking(Booking b) {
590 if (c.isDatabaseLocal() == false)
595 ObjectSet<Booking> result = db.queryByExample(b);
596 result.get(0).getOffer().getBookings().remove(b);
597 db.store(result.get(0).getOffer());
598 db.delete(result.get(0));
600 } catch (Exception e) {