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 res = db.queryByExample(DB4oManagerAux.class);
73 ListIterator listIter = res.listIterator();
74 if (listIter.hasNext())
75 theDB4oManagerAux = (DB4oManagerAux) res.next();
79 private static void openDB() {
80 configuration = Db4oEmbedded.newConfiguration();
81 configuration.common().activationDepth(c.getActivationDepth());
82 configuration.common().updateDepth(c.getUpdateDepth());
83 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
84 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
87 private void openSDB() {
89 configurationCS = Db4oClientServer.newClientConfiguration();
90 configurationCS.common().activationDepth(c.getActivationDepth());
91 configurationCS.common().updateDepth(c.getUpdateDepth());
92 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
93 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
94 c.getDatabasePort(), c.getUser(), c.getPassword());
98 class DB4oManagerAux {
102 DB4oManagerAux(int bookingNumber, int offerNumber) {
103 this.bookingNumber = bookingNumber;
104 this.offerNumber = offerNumber;
108 public static DB4oManager getInstance() throws Exception {
109 if (theDB4oManager == null)
110 theDB4oManager = new DB4oManager();
111 return theDB4oManager;
114 public void initializeDB() {
117 Owner jon = new Owner("Jon");
118 Owner alfredo = new Owner("Alfredo");
119 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3, 3,
121 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4, 4,
123 jon.setBankAccount("1349 5677 21 2133567777");
124 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5,
126 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
127 alfredo.setBankAccount("4144 0087 23 9700002133");
128 Account jonAcc = new Account("userJon", "passJon", jon);
129 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
131 Account admin = new Account("admin","admin", true);
132 db.store(Administrator.giveAdmin());
136 db.store(alfredoAcc);
144 public void deleteDB() {
146 if (c.isDatabaseLocal() == false)
152 Owner proto = new Owner(null, null);
153 ObjectSet result = db.queryByExample(proto);
154 Vector<Owner> owners = new Vector<Owner>();
155 while (result.hasNext()) {
156 Owner o = (Owner) result.next();
157 System.out.println("Deleted owner: " + o.toString());
168 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
169 Date lastDay, float price) throws RemoteException, Exception {
172 if (c.isDatabaseLocal() == false)
179 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
181 ObjectSet result = db.queryByExample(proto);
182 RuralHouse rh = (RuralHouse) result.next();
183 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
185 db.store(theDB4oManagerAux); // To store the new value for
190 } catch (com.db4o.ext.ObjectNotStorableException e) {
192 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
199 public Offer modifyOffer(Offer offer) throws RemoteException, Exception {
200 if (c.isDatabaseLocal() == false)
210 } catch (com.db4o.ext.ObjectNotStorableException e) {
212 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
219 public void deleteOffer(RuralHouse rh, Offer offer) throws RemoteException,
221 if (c.isDatabaseLocal() == false)
232 } catch (com.db4o.ext.ObjectNotStorableException e) {
234 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
241 public LinkedList<RuralHouse>[] getAdminData(){
242 if (c.isDatabaseLocal() == false)
246 LinkedList<RuralHouse>[] ret = new LinkedList[2];
250 List<Administrator> admL = db.query(new Predicate<Administrator>(){
251 public boolean match(Administrator admin){
256 ret[0] = admL.get(0).getAddRequest();
257 ret[1] = admL.get(0).getRemoveRequest();
267 public void storeAdmin() {
268 if (c.isDatabaseLocal() == false)
274 List<Administrator> admL = db.query(new Predicate<Administrator>(){
275 public boolean match(Administrator admin){
280 admL.get(0).setAddRequest(Administrator.getAddRequest());
281 admL.get(0).setRemoveRequest(Administrator.getRemoveRequest());
297 * This method creates a book with a corresponding parameters
300 * day, last day, house number and telephone
303 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
304 Date lastDate, String bookTelephoneNumber)
305 throws OfferCanNotBeBooked {
307 if (c.isDatabaseLocal() == false)
317 if (c.isDatabaseLocal() == false)
320 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
321 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
322 ObjectSet result = db.queryByExample(proto);
323 RuralHouse rh = (RuralHouse) result.next();
326 offer = rh.findOffer(firstDate, lastDate);
329 offer.createBooking(theDB4oManagerAux.bookingNumber++,
330 bookTelephoneNumber);
331 db.store(theDB4oManagerAux); // To store the new value for
335 bok = offer.getBooking();
338 } catch (com.db4o.ext.ObjectNotStorableException e) {
340 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
341 } catch (Exception exc) {
342 exc.printStackTrace();
350 * This method existing owners
353 public Vector<Owner> getOwners() throws RemoteException, Exception {
355 if (c.isDatabaseLocal() == false)
361 Owner proto = new Owner(null, null);
362 ObjectSet result = db.queryByExample(proto);
363 Vector<Owner> owners = new Vector<Owner>();
364 while (result.hasNext())
365 owners.add((Owner) result.next());
372 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
375 if (c.isDatabaseLocal() == false)
381 RuralHouse proto = new RuralHouse(null, null, null, null, null);
382 ObjectSet result = db.queryByExample(proto);
383 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
384 while (result.hasNext())
385 ruralHouses.add((RuralHouse) result.next());
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(String usr, String pwd)
435 throws RemoteException, Exception {
437 if (c.isDatabaseLocal() == false)
443 Account proto = new Account(usr, pwd, null);
444 ObjectSet<Account> result = db.queryByExample(proto);
445 Vector<Account> accounts = new Vector<Account>();
446 while (result.hasNext())
447 accounts.add((Account) result.next());
457 public boolean storeRuralHouses(RuralHouse rh) {
459 if (c.isDatabaseLocal() == false)
464 boolean stored = false;
465 RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
468 ObjectSet<Owner> result = db.queryByExample(house);
469 if (result.isEmpty()) {
480 public void removeHouse(RuralHouse rh, Owner owner) {
482 if (c.isDatabaseLocal() == false)
487 ObjectSet<RuralHouse> result = db.queryByExample(rh);
488 if (!result.isEmpty()) {
489 RuralHouse found = (RuralHouse) result.get(0);
490 // db.delete(found.getOwner());
495 } catch (Exception exc) {
496 exc.printStackTrace();
503 public Vector<RuralHouse> getRuralHousesByTown(String town) {
504 RuralHouse rh = new RuralHouse(null, null, null, town, null);
506 if (c.isDatabaseLocal() == false)
512 ObjectSet<RuralHouse> result = db.queryByExample(rh);
513 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
514 while (result.hasNext())
515 ruralHouses.add(result.next());
523 public RuralHouse getRuralHouseByName(String name) {
524 RuralHouse rh = new RuralHouse(name, null, null, null, null);
526 if (c.isDatabaseLocal() == false)
532 ObjectSet<RuralHouse> result = db.queryByExample(rh);
533 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
534 while (result.hasNext())
535 ruralHouses.add(result.next());
537 if (!ruralHouses.isEmpty())
538 return ruralHouses.get(0);
541 } catch (NullPointerException e) {
547 public Vector<RuralHouse> getRuralHouses(String town, int nBed, int nKit,
548 int nBath, int nPark, int nLiv) {
549 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
550 RuralHouse rh = new RuralHouse(null, null, null, town, fea);
551 if (c.isDatabaseLocal() == false)
557 ObjectSet<RuralHouse> result = db.queryByExample(rh);
558 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
559 while (result.hasNext())
560 ruralHouses.add(result.next());
563 } catch (NullPointerException e) {