4 //import java.util.Enumeration;
5 //import java.util.Vector;
6 import java.rmi.RemoteException;
8 import java.util.LinkedList;
10 import java.util.ListIterator;
11 import java.util.Vector;
13 import com.db4o.Db4oEmbedded;
14 import com.db4o.ObjectContainer;
15 import com.db4o.ObjectSet;
16 import com.db4o.config.EmbeddedConfiguration;
17 import com.db4o.cs.Db4oClientServer;
18 import com.db4o.cs.config.ClientConfiguration;
19 import com.db4o.query.Predicate;
21 import configuration.ConfigXML;
22 import domain.Account;
23 import domain.Administrator;
24 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");
123 Owner alfredo = new Owner("Alfredo");
124 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
126 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
128 jon.setBankAccount("1349 5677 21 2133567777");
129 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
132 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
133 alfredo.setBankAccount("4144 0087 23 9700002133");
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);
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");
223 public Administrator getAdminData() {
224 if (c.isDatabaseLocal() == false)
231 List<Administrator> admL = db.query(new Predicate<Administrator>() {
235 private static final long serialVersionUID = 1L;
237 public boolean match(Administrator admin) {
250 @SuppressWarnings("static-access")
251 public void storeAdmin() {
252 if (c.isDatabaseLocal() == false)
258 List<Administrator> admL = db.query(new Predicate<Administrator>() {
262 private static final long serialVersionUID = 1L;
264 public boolean match(Administrator admin) {
270 admL.get(0).setAddRequest(Administrator.getInstance().getAddRequest());
271 admL.get(0).setRemoveRequest(Administrator.getInstance().getRemoveRequest());
272 admL.get(0).setNewOwnerRequest(Administrator.getInstance().getNewOwnerRequest());
275 } catch (Exception e) {
284 * This method creates a book with a corresponding parameters
287 * day, last day, house number and telephone
290 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
291 Date lastDate, String bookTelephoneNumber)
292 throws OfferCanNotBeBooked {
294 if (c.isDatabaseLocal() == false)
303 if (c.isDatabaseLocal() == false)
306 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
307 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
308 ObjectSet<RuralHouse> result = db.queryByExample(proto);
309 RuralHouse rh = (RuralHouse) result.next();
312 offer = rh.findOffer(firstDate, lastDate);
315 offer.createBooking(theDB4oManagerAux.bookingNumber++,
316 bookTelephoneNumber);
317 db.store(theDB4oManagerAux); // To store the new value for
321 bok = offer.getBooking();
324 } catch (com.db4o.ext.ObjectNotStorableException e) {
326 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
327 } catch (Exception exc) {
328 exc.printStackTrace();
336 * This method existing owners
339 public Vector<Owner> getOwners() throws RemoteException, Exception {
341 if (c.isDatabaseLocal() == false)
347 Owner proto = new Owner(null, null);
348 ObjectSet<Owner> result = db.queryByExample(proto);
349 Vector<Owner> owners = new Vector<Owner>();
350 while (result.hasNext())
351 owners.add((Owner) result.next());
358 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
361 if (c.isDatabaseLocal() == false)
367 RuralHouse proto = new RuralHouse(null, null, null, null, null);
368 ObjectSet<RuralHouse> result = db.queryByExample(proto);
369 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
370 while (result.hasNext())
371 ruralHouses.add((RuralHouse) result.next());
378 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
379 Date lastDay) throws RemoteException, OverlappingOfferExists {
381 if (c.isDatabaseLocal() == false)
388 RuralHouse rhn = (RuralHouse) db.queryByExample(
389 new RuralHouse(rh.getHouseName(), null, null, null, null))
391 if (rhn.overlapsWith(firstDay, lastDay) != null)
392 throw new OverlappingOfferExists();
400 public static ObjectContainer getContainer() {
404 public void close() {
406 System.out.println("DataBase closed");
409 public String toString() {
410 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
417 * @throws RemoteException
420 public Vector<Account> getAccount(Account proto)
421 throws RemoteException, Exception {
423 if (c.isDatabaseLocal() == false)
429 ObjectSet<Account> result = db.queryByExample(proto);
430 Vector<Account> accounts = new Vector<Account>();
431 while (result.hasNext())
432 accounts.add((Account) result.next());
442 public boolean storeRuralHouses(RuralHouse rh) {
444 if (c.isDatabaseLocal() == false)
449 boolean stored = false;
450 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
453 ObjectSet<RuralHouse> result = db.queryByExample(house);
454 if (result.isEmpty()) {
455 Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
457 ow.addRuralHouse(rh);
462 db.delete(result.get(0));
473 public void removeHouse(RuralHouse rh, Owner owner) {
475 if (c.isDatabaseLocal() == false)
480 ObjectSet<Owner> result = db.queryByExample(owner);
481 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
482 if (!rhs.isEmpty()) {
483 Owner found = result.get(0);
484 found.getRuralHouses().remove(rhs.get(0));
485 db.delete(rhs.get(0));
489 } catch (Exception exc) {
490 exc.printStackTrace();
497 public Vector<RuralHouse> getRuralHouses(String name, String town,
498 int nBed, int nKit, int nBath, int nPark, int nLiv) {
499 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
500 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
501 if (c.isDatabaseLocal() == false)
507 ObjectSet<RuralHouse> result = db.queryByExample(rh);
508 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
509 while (result.hasNext())
510 ruralHouses.add(result.next());
513 } catch (NullPointerException e) {