4 //import java.util.Enumeration;
5 //import java.util.Vector;
7 import java.rmi.RemoteException;
9 import java.util.HashSet;
10 import java.util.ListIterator;
11 import java.util.Vector;
14 import com.db4o.config.EmbeddedConfiguration;
15 import com.db4o.cs.Db4oClientServer;
16 import com.db4o.cs.config.ClientConfiguration;
18 import configuration.ConfigXML;
19 import domain.Account;
20 import domain.Booking;
21 import domain.HouseFeatures;
23 //import dataModel.Offer;
25 import domain.RuralHouse;
26 import exceptions.OfferCanNotBeBooked;
27 import exceptions.OverlappingOfferExists;
29 public class DB4oManager {
31 private static ObjectContainer db;
32 private static EmbeddedConfiguration configuration;
33 private static ClientConfiguration configurationCS;
34 private int bookingNumber = 0; // if it is "static" then it is not
36 private int offerNumber = 0; // if it is "static" then it is not serialized
37 private static DB4oManager theDB4oManager = null;
39 private static DB4oManagerAux theDB4oManagerAux;
43 private DB4oManager() throws Exception {
44 theDB4oManagerAux = new DB4oManagerAux(0, 0);
45 c = ConfigXML.getInstance();
46 System.out.println("Creating DB4oManager instance => isDatabaseLocal: "
47 + c.isDatabaseLocal() + " getDatabBaseOpenMode: "
48 + c.getDataBaseOpenMode());
50 if ((c.getDataBaseOpenMode().equals("initialize"))
51 && (c.isDatabaseLocal()))
52 new File(c.getDb4oFilename()).delete();
54 if (c.isDatabaseLocal()) {
56 System.out.println("DataBase opened");
57 } else // c.isDatabaseLocal==false
60 System.out.println("Remote DataBase opened");
62 if (c.getDataBaseOpenMode().equals("initialize")) {
64 System.out.println("DataBase initialized");
65 } else // c.getDataBaseOpenMode().equals("open")
68 ObjectSet res = db.queryByExample(DB4oManagerAux.class);
69 ListIterator listIter = res.listIterator();
70 if (listIter.hasNext())
71 theDB4oManagerAux = (DB4oManagerAux) res.next();
75 private static void openDB() {
76 configuration = Db4oEmbedded.newConfiguration();
77 configuration.common().activationDepth(c.getActivationDepth());
78 configuration.common().updateDepth(c.getUpdateDepth());
79 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
80 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
83 private void openSDB() {
85 configurationCS = Db4oClientServer.newClientConfiguration();
86 configurationCS.common().activationDepth(c.getActivationDepth());
87 configurationCS.common().updateDepth(c.getUpdateDepth());
88 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
89 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
90 c.getDatabasePort(), c.getUser(), c.getPassword());
94 class DB4oManagerAux {
98 DB4oManagerAux(int bookingNumber, int offerNumber) {
99 this.bookingNumber = bookingNumber;
100 this.offerNumber = offerNumber;
104 public static DB4oManager getInstance() throws Exception {
105 if (theDB4oManager == null)
106 theDB4oManager = new DB4oManager();
107 return theDB4oManager;
110 public void initializeDB() {
113 Owner jon = new Owner("Jon");
114 Owner alfredo = new Owner("Alfredo");
115 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3, 3,
117 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4, 4,
119 jon.setBankAccount("1349 5677 21 2133567777");
120 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5,
122 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
123 alfredo.setBankAccount("4144 0087 23 9700002133");
124 Account jonAcc = new Account("userJon", "passJon", jon);
125 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
130 db.store(alfredoAcc);
137 public void deleteDB() {
139 if (c.isDatabaseLocal() == false)
145 Owner proto = new Owner(null, null);
146 ObjectSet result = db.queryByExample(proto);
147 Vector<Owner> owners = new Vector<Owner>();
148 while (result.hasNext()) {
149 Owner o = (Owner) result.next();
150 System.out.println("Deleted owner: " + o.toString());
159 @SuppressWarnings("finally")
160 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
161 Date lastDay, float price) throws RemoteException, Exception {
164 if (c.isDatabaseLocal() == false)
171 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
173 ObjectSet result = db.queryByExample(proto);
174 RuralHouse rh = (RuralHouse) result.next();
175 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
177 db.store(theDB4oManagerAux); // To store the new value for
182 } catch (com.db4o.ext.ObjectNotStorableException e) {
184 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
191 @SuppressWarnings("finally")
192 public Offer modifyOffer(Offer offer) throws RemoteException, Exception {
193 if (c.isDatabaseLocal() == false)
203 } catch (com.db4o.ext.ObjectNotStorableException e) {
205 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
212 @SuppressWarnings("finally")
213 public void deleteOffer(RuralHouse rh, Offer offer) throws RemoteException,
215 if (c.isDatabaseLocal() == false)
226 } catch (com.db4o.ext.ObjectNotStorableException e) {
228 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
235 * This method creates a book with a corresponding parameters
238 * day, last day, house number and telephone
241 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
242 Date lastDate, String bookTelephoneNumber)
243 throws OfferCanNotBeBooked {
245 if (c.isDatabaseLocal() == false)
254 if (c.isDatabaseLocal() == false)
257 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
258 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
259 ObjectSet result = db.queryByExample(proto);
260 RuralHouse rh = (RuralHouse) result.next();
263 offer = rh.findOffer(firstDate, lastDate);
266 offer.createBooking(theDB4oManagerAux.bookingNumber++,
267 bookTelephoneNumber);
268 db.store(theDB4oManagerAux); // To store the new value for
272 bok = offer.getBooking();
275 } catch (com.db4o.ext.ObjectNotStorableException e) {
277 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
278 } catch (Exception exc) {
279 exc.printStackTrace();
287 * This method existing owners
290 public Vector<Owner> getOwners() throws RemoteException, Exception {
292 if (c.isDatabaseLocal() == false)
298 Owner proto = new Owner(null, null);
299 ObjectSet result = db.queryByExample(proto);
300 Vector<Owner> owners = new Vector<Owner>();
301 while (result.hasNext())
302 owners.add((Owner) result.next());
309 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
312 if (c.isDatabaseLocal() == false)
318 RuralHouse proto = new RuralHouse(null, null, null, null, null);
319 ObjectSet result = db.queryByExample(proto);
320 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
321 while (result.hasNext())
322 ruralHouses.add((RuralHouse) result.next());
329 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
330 Date lastDay) throws RemoteException, OverlappingOfferExists {
332 if (c.isDatabaseLocal() == false)
339 RuralHouse rhn = (RuralHouse) db.queryByExample(
340 new RuralHouse(rh.getHouseName(), null, null, null, null))
342 if (rhn.overlapsWith(firstDay, lastDay) != null)
343 throw new OverlappingOfferExists();
351 public static ObjectContainer getContainer() {
355 public void close() {
357 System.out.println("DataBase closed");
360 public String toString() {
361 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
368 * @throws RemoteException
371 public Vector<Account> getAccount(String usr, String pwd)
372 throws RemoteException, Exception {
374 if (c.isDatabaseLocal() == false)
380 Account proto = new Account(usr, pwd, new Owner(null, null));
381 ObjectSet<Account> result = db.queryByExample(proto);
382 Vector<Account> accounts = new Vector<Account>();
383 while (result.hasNext())
384 accounts.add((Account) result.next());
394 public boolean storeRuralHouses(RuralHouse rh) {
396 if (c.isDatabaseLocal() == false)
401 boolean stored = false;
402 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
405 ObjectSet<Owner> result = db.queryByExample(house);
406 if (result.isEmpty()) {
417 public void removeHouse(RuralHouse rh, Owner owner) {
419 if (c.isDatabaseLocal() == false)
424 ObjectSet<RuralHouse> result = db.queryByExample(rh);
425 if (!result.isEmpty()) {
426 RuralHouse found = (RuralHouse) result.get(0);
427 // db.delete(found.getOwner());
432 } catch (Exception exc) {
433 exc.printStackTrace();
440 public Vector<RuralHouse> getRuralHousesByTown(String town) {
441 RuralHouse rh = new RuralHouse(null, null, null, town, null);
443 if (c.isDatabaseLocal() == false)
449 ObjectSet<RuralHouse> result = db.queryByExample(rh);
450 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
451 while (result.hasNext())
452 ruralHouses.add(result.next());
460 public RuralHouse getRuralHouseByName(String name) {
461 RuralHouse rh = new RuralHouse(name, null, null, null, null);
463 if (c.isDatabaseLocal() == false)
469 ObjectSet<RuralHouse> result = db.queryByExample(rh);
470 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
471 while (result.hasNext())
472 ruralHouses.add(result.next());
474 if (!ruralHouses.isEmpty())
475 return ruralHouses.get(0);
478 } catch (NullPointerException e) {
484 public Vector<RuralHouse> getRuralHouses(String town, int nBed, int nKit,
485 int nBath, int nPark, int nLiv) {
486 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
487 RuralHouse rh = new RuralHouse(null, null, null, town, fea);
488 if (c.isDatabaseLocal() == false)
494 ObjectSet<RuralHouse> result = db.queryByExample(rh);
495 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
496 while (result.hasNext())
497 ruralHouses.add(result.next());
500 } catch (NullPointerException e) {