DB server side improved some problems when showing bookings remain
[RRRRHHHH_Code] / ruralHouses / src / dataAccess / DB4oManager.java
index cb923e1..403c916 100644 (file)
@@ -5,7 +5,6 @@ import java.io.File;
 //import java.util.Vector;
 import java.rmi.RemoteException;
 import java.util.Date;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Vector;
@@ -22,6 +21,7 @@ import configuration.ConfigXML;
 import domain.Account;
 import domain.Administrator;
 import domain.Booking;
+import domain.Client;
 import domain.HouseFeatures;
 import domain.Offer;
 //import dataModel.Offer;
@@ -69,8 +69,9 @@ public class DB4oManager {
                } else // c.getDataBaseOpenMode().equals("open")
 
                {
-                       ObjectSet res = db.queryByExample(DB4oManagerAux.class);
-                       ListIterator listIter = res.listIterator();
+                       ObjectSet<DB4oManagerAux> res = db
+                                       .queryByExample(DB4oManagerAux.class);
+                       ListIterator<DB4oManagerAux> listIter = res.listIterator();
                        if (listIter.hasNext())
                                theDB4oManagerAux = (DB4oManagerAux) res.next();
                }
@@ -81,6 +82,18 @@ public class DB4oManager {
                configuration.common().activationDepth(c.getActivationDepth());
                configuration.common().updateDepth(c.getUpdateDepth());
                configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
+               configuration.common().objectClass(Booking.class).cascadeOnDelete(true);
+               configuration.common().objectClass(RuralHouse.class)
+                               .cascadeOnDelete(true);
+               configuration.common().objectClass(Account.class).cascadeOnDelete(true);
+               configuration.common().objectClass(Offer.class).cascadeOnDelete(true);
+               configuration.common().objectClass(Owner.class).cascadeOnUpdate(true);
+               configuration.common().objectClass(Booking.class).cascadeOnUpdate(true);
+               configuration.common().objectClass(RuralHouse.class)
+                               .cascadeOnUpdate(true);
+               configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
+               configuration.common().objectClass(Offer.class).cascadeOnUpdate(true);
+               configuration.common().objectClass(Account.class).cascadeOnUpdate(true);
                db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
        }
 
@@ -90,6 +103,23 @@ public class DB4oManager {
                configurationCS.common().activationDepth(c.getActivationDepth());
                configurationCS.common().updateDepth(c.getUpdateDepth());
                configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
+               configurationCS.common().objectClass(Booking.class)
+                               .cascadeOnDelete(true);
+               configurationCS.common().objectClass(RuralHouse.class)
+                               .cascadeOnDelete(true);
+               configurationCS.common().objectClass(Account.class)
+                               .cascadeOnDelete(true);
+               configurationCS.common().objectClass(Offer.class).cascadeOnDelete(true);
+               configurationCS.common().objectClass(Owner.class).cascadeOnUpdate(true);
+               configurationCS.common().objectClass(Booking.class)
+                               .cascadeOnUpdate(true);
+               configurationCS.common().objectClass(RuralHouse.class)
+                               .cascadeOnUpdate(true);
+               configurationCS.common().objectClass(Account.class)
+                               .cascadeOnUpdate(true);
+               configurationCS.common().objectClass(Offer.class).cascadeOnUpdate(true);
+               configurationCS.common().objectClass(Account.class)
+                               .cascadeOnUpdate(true);
                db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
                                c.getDatabasePort(), c.getUser(), c.getPassword());
 
@@ -114,30 +144,30 @@ public class DB4oManager {
        public void initializeDB() {
 
                try {
-                       Owner jon = new Owner("Jon");
-                       Owner alfredo = new Owner("Alfredo");
-                       jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3, 3,
-                                       3);
-                       jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4, 4,
-                                       4, 4);
-                       jon.setBankAccount("1349 5677 21 2133567777");
-                       alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5,
-                                       5, 5, 5, 5);
+                       Owner jon = new Owner("Jon", "1349 5677 21 2133567777",
+                                       "Jon@gmail.com");
+                       Owner alfredo = new Owner("Alfredo", "4144 0087 23 9700002133",
+                                       "alfredo@gmail.com");
+                       jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
+                                       3, 3);
+                       jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
+                                       4, 4, 4);
+                       alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
+                                       5, 5, 5);
+
                        alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
-                       alfredo.setBankAccount("4144 0087 23 9700002133");
-                       Account jonAcc = new Account("userJon", "passJon", jon);
+                       Account jonAcc = new Account("1", "1", jon);
                        Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
                                        alfredo);
-                       Account admin = new Account("admin","admin", true);
-                       db.store(Administrator.giveAdmin());
-                       db.store(jon);
-                       db.store(alfredo);
+
+                       Account admin = new Account("admin", "admin", true);
+                       db.store(Administrator.getInstance());
                        db.store(jonAcc);
                        db.store(alfredoAcc);
                        db.store(admin);
                        db.commit();
                } finally {
-                       db.close();     
+                       db.close();
                }
        }
 
@@ -149,9 +179,8 @@ public class DB4oManager {
                        openDB();
 
                try {
-                       Owner proto = new Owner(null, null);
-                       ObjectSet result = db.queryByExample(proto);
-                       Vector<Owner> owners = new Vector<Owner>();
+                       Owner proto = new Owner(null, null, null);
+                       ObjectSet<Owner> result = db.queryByExample(proto);
                        while (result.hasNext()) {
                                Owner o = (Owner) result.next();
                                System.out.println("Deleted owner: " + o.toString());
@@ -162,8 +191,6 @@ public class DB4oManager {
                        db.close();
                }
        }
-       
-       
 
        public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
                        Date lastDay, float price) throws RemoteException, Exception {
@@ -178,7 +205,7 @@ public class DB4oManager {
 
                        RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
                                        null, null, null);
-                       ObjectSet result = db.queryByExample(proto);
+                       ObjectSet<RuralHouse> result = db.queryByExample(proto);
                        RuralHouse rh = (RuralHouse) result.next();
                        o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
                                        lastDay, price);
@@ -196,15 +223,17 @@ public class DB4oManager {
                return o;
        }
 
-       public Offer modifyOffer(Offer offer) throws RemoteException, Exception {
+       public void deleteOffer(Offer offer) throws RemoteException, Exception {
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
 
                try {
-
-                       db.store(offer);
+                       ObjectSet<Offer> of = db.queryByExample(offer);
+                       RuralHouse rh = of.get(0).getRuralHouse();
+                       System.out.println(rh.getAllOffers().remove(of.get(0)));
+                       db.store(rh);
                        db.commit();
 
                } catch (com.db4o.ext.ObjectNotStorableException e) {
@@ -213,86 +242,86 @@ public class DB4oManager {
                } finally {
                        db.close();
                }
-               return offer;
        }
 
-       public void deleteOffer(RuralHouse rh, Offer offer) throws RemoteException,
-                       Exception {
+       public Vector<Offer> getRHsOffer(String name) {
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
 
                try {
-
-                       db.store(rh);
-                       db.delete(offer);
-                       db.commit();
-
-               } catch (com.db4o.ext.ObjectNotStorableException e) {
-                       System.out
-                                       .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
+                       RuralHouse rh = (RuralHouse) db.queryByExample(
+                                       new RuralHouse(name, null, null, null, null)).get(0);
+                       Offer proto = new Offer(0, rh, null, null, 0);
+                       ObjectSet<Offer> result = db.queryByExample(proto);
+                       return new Vector<Offer>(result);
                } finally {
                        db.close();
                }
        }
 
-       
-       public LinkedList<RuralHouse>[] getAdminData(){
+       public Administrator getAdminData() {
+
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
-               LinkedList<RuralHouse>[] ret =  new LinkedList[2];
-               
+
                try {
-                       
-                       List<Administrator> admL = db.query(new Predicate<Administrator>(){
-                               public boolean match(Administrator admin){
+
+                       List<Administrator> admL = db.query(new Predicate<Administrator>() {
+                               private static final long serialVersionUID = 1L;
+
+                               public boolean match(Administrator admin) {
                                        return true;
                                }
                        });
-                       
-                       ret[0] = admL.get(0).getAddRequest();
-                       ret[1] = admL.get(0).getRemoveRequest();
-                       return ret;
-               }
-               finally {
+
+                       return admL.get(0);
+               } finally {
                        db.close();
-                       
+
                }
-               
+
        }
-       
+
        public void storeAdmin() {
+
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
-                       openDB();               
+                       openDB();
                try {
-                       
-                       List<Administrator> admL = db.query(new Predicate<Administrator>(){
-                               public boolean match(Administrator admin){
+
+                       List<Administrator> admL = db.query(new Predicate<Administrator>() {
+                               /**
+                                * 
+                                */
+                               private static final long serialVersionUID = 1L;
+
+                               public boolean match(Administrator admin) {
                                        return true;
                                }
                        });
-                       
-                       admL.get(0).setAddRequest(Administrator.getAddRequest());
-                       admL.get(0).setRemoveRequest(Administrator.getRemoveRequest());
+
+                       admL.get(0).setAddRequest(
+                                       Administrator.getInstance().getAddRequest());
+                       admL.get(0).setRemoveRequest(
+                                       Administrator.getInstance().getRemoveRequest());
+                       admL.get(0).setNewOwnerRequest(
+                                       Administrator.getInstance().getNewOwnerRequest());
+
                        db.commit();
-                       
-               }
-               catch(Exception e){
-                       
-               }
-               finally {
+
+               } catch (Exception e) {
+
+               } finally {
                        db.close();
                }
-               
-               
+
        }
-       
-       
+
        /**
         * This method creates a book with a corresponding parameters
         * 
@@ -300,17 +329,15 @@ public class DB4oManager {
         *            day, last day, house number and telephone
         * @return a book
         */
-       public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
-                       Date lastDate, String bookTelephoneNumber)
-                       throws OfferCanNotBeBooked {
+       public Vector<Booking> createBooking(RuralHouse ruralHouse, Date firstDate,
+                       Date lastDate, Client cl) throws OfferCanNotBeBooked {
 
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
 
-               Booking bok = null;
-               
+               Vector<Booking> book = new Vector<Booking>();
 
                try {
 
@@ -318,21 +345,23 @@ public class DB4oManager {
                                openSDB();
 
                        RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
-                                       ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
-                       ObjectSet result = db.queryByExample(proto);
+                                       null, null, null);
+                       ObjectSet<RuralHouse> result = db.queryByExample(proto);
                        RuralHouse rh = (RuralHouse) result.next();
 
                        Offer offer;
-                       offer = rh.findOffer(firstDate, lastDate);
+                       offer = (Offer) db.queryByExample(
+                                       new Offer(0, rh, firstDate, lastDate, 0)).get(0);
 
                        if (offer != null) {
-                               offer.createBooking(theDB4oManagerAux.bookingNumber++,
-                                               bookTelephoneNumber);
+                               offer.createBooking(theDB4oManagerAux.bookingNumber++, cl);
                                db.store(theDB4oManagerAux); // To store the new value for
                                                                                                // bookingNumber
+
                                db.store(offer);
                                db.commit();
-                               bok = offer.getBooking();
+                               book = offer.getBookings();
+
                        }
 
                } catch (com.db4o.ext.ObjectNotStorableException e) {
@@ -343,7 +372,7 @@ public class DB4oManager {
                } finally {
                        db.close();
                }
-               return bok;
+               return book;
        }
 
        /**
@@ -358,8 +387,8 @@ public class DB4oManager {
                        openDB();
 
                try {
-                       Owner proto = new Owner(null, null);
-                       ObjectSet result = db.queryByExample(proto);
+                       Owner proto = new Owner(null, null, null);
+                       ObjectSet<Owner> result = db.queryByExample(proto);
                        Vector<Owner> owners = new Vector<Owner>();
                        while (result.hasNext())
                                owners.add((Owner) result.next());
@@ -369,26 +398,6 @@ public class DB4oManager {
                }
        }
 
-       public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
-                       Exception {
-
-               if (c.isDatabaseLocal() == false)
-                       openSDB();
-               else
-                       openDB();
-
-               try {
-                       RuralHouse proto = new RuralHouse(null, null, null, null, null);
-                       ObjectSet result = db.queryByExample(proto);
-                       Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
-                       while (result.hasNext())
-                               ruralHouses.add((RuralHouse) result.next());
-                       return ruralHouses;
-               } finally {
-                       db.close();
-               }
-       }
-
        public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
                        Date lastDay) throws RemoteException, OverlappingOfferExists {
 
@@ -411,10 +420,6 @@ public class DB4oManager {
                }
        }
 
-       public static ObjectContainer getContainer() {
-               return db;
-       }
-
        public void close() {
                db.close();
                System.out.println("DataBase closed");
@@ -426,13 +431,13 @@ public class DB4oManager {
 
        /**
         * @param usr
-        * @param pwd
+        * @param ps
         * @return
         * @throws RemoteException
         * @throws Exception
         */
-       public Vector<Account> getAccount(String usr, String pwd)
-                       throws RemoteException, Exception {
+       public Vector<Account> getAccount(Account proto) throws RemoteException,
+                       Exception {
 
                if (c.isDatabaseLocal() == false)
                        openSDB();
@@ -440,7 +445,6 @@ public class DB4oManager {
                        openDB();
 
                try {
-                       Account proto = new Account(usr, pwd, null);
                        ObjectSet<Account> result = db.queryByExample(proto);
                        Vector<Account> accounts = new Vector<Account>();
                        while (result.hasNext())
@@ -465,8 +469,16 @@ public class DB4oManager {
                RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null,
                                null);
                try {
-                       ObjectSet<Owner> result = db.queryByExample(house);
+                       ObjectSet<RuralHouse> result = db.queryByExample(house);
                        if (result.isEmpty()) {
+                               Owner ow = (Owner) db.queryByExample(rh.getOwner()).get(0);
+                               rh.setOwner(ow);
+                               ow.addRuralHouse(rh);
+                               db.store(rh);
+                               db.commit();
+                               stored = true;
+                       } else {
+                               db.delete(result.get(0));
                                db.store(rh);
                                db.commit();
                                stored = true;
@@ -484,12 +496,13 @@ public class DB4oManager {
                else
                        openDB();
                try {
-                       ObjectSet<RuralHouse> result = db.queryByExample(rh);
-                       if (!result.isEmpty()) {
-                               RuralHouse found = (RuralHouse) result.get(0);
-                               // db.delete(found.getOwner());
-                               db.store(owner);
-                               db.delete(found);
+                       ObjectSet<Owner> result = db.queryByExample(owner);
+                       ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
+                       if (!rhs.isEmpty()) {
+                               Owner found = result.get(0);
+                               found.getRuralHouses().remove(rhs.get(0));
+                               db.delete(rhs.get(0));
+                               db.store(found);
                                db.commit();
                        }
                } catch (Exception exc) {
@@ -500,9 +513,10 @@ public class DB4oManager {
 
        }
 
-       public Vector<RuralHouse> getRuralHousesByTown(String town) {
-               RuralHouse rh = new RuralHouse(null, null, null, town, null);
-
+       public Vector<RuralHouse> getRuralHouses(Owner ow, String name,
+                       String town, int nBed, int nKit, int nBath, int nPark, int nLiv) {
+               HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
+               RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
@@ -513,58 +527,117 @@ public class DB4oManager {
                        Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
                        while (result.hasNext())
                                ruralHouses.add(result.next());
-                       return ruralHouses;
-               } finally {
                        db.close();
+                       return ruralHouses;
+               } catch (NullPointerException e) {
+                       return null;
                }
 
        }
 
-       public RuralHouse getRuralHouseByName(String name) {
-               RuralHouse rh = new RuralHouse(name, null, null, null, null);
-
+       public boolean addAccount(Account acc) {
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
 
                try {
-                       ObjectSet<RuralHouse> result = db.queryByExample(rh);
-                       Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
-                       while (result.hasNext())
-                               ruralHouses.add(result.next());
+                       ObjectSet<Account> result = db.queryByExample(new Account(acc
+                                       .getUsername()));
+                       if (result.isEmpty()) {
+                               db.store(acc);
+                               db.commit();
+                               return true;
+                       }
+               } catch (Exception exc) {
+                       exc.printStackTrace();
+               } finally {
                        db.close();
-                       if (!ruralHouses.isEmpty())
-                               return ruralHouses.get(0);
-                       else
-                               return null;
-               } catch (NullPointerException e) {
-                       return null;
                }
+               return false;
+       }
+
+       public boolean removeAccount(Owner own) {
+               if (c.isDatabaseLocal() == false)
+                       openSDB();
+               else
+                       openDB();
 
+               try {
+                       ObjectSet<Account> result = db.queryByExample(new Account(own));
+                       if (!result.isEmpty()) {
+                               db.delete(result.get(0));
+                               db.commit();
+                               return true;
+                       }
+               } catch (Exception exc) {
+                       exc.printStackTrace();
+               } finally {
+                       db.close();
+               }
+               return false;
        }
 
-       public Vector<RuralHouse> getRuralHouses(String town, int nBed, int nKit,
-                       int nBath, int nPark, int nLiv) {
-               HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
-               RuralHouse rh = new RuralHouse(null, null, null, town, fea);
+       public void acceptBooking(Offer of) {
+               Offer off = new Offer(of.getOfferNumber(), new RuralHouse(of
+                               .getRuralHouse().getHouseName(), null, null, null, null), null,
+                               null, 0);
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
 
                try {
-                       ObjectSet<RuralHouse> result = db.queryByExample(rh);
-                       Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
-                       while (result.hasNext())
-                               ruralHouses.add(result.next());
+                       ObjectSet<Offer> result = db.queryByExample(off);
+                       db.delete(result.get(0));
+                       RuralHouse rh = result.get(0).getRuralHouse();
+                       of.setRuralHouse(rh);
+                       rh.getAllOffers().remove(result.get(0));
+                       rh.getAllOffers().add(of);
+                       db.store(rh);
+                       db.close();
+
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       ;
+               }
+       }
+
+       public void removeBooking(Booking b) {
+               if (c.isDatabaseLocal() == false)
+                       openSDB();
+               else
+                       openDB();
+               try {
+                       Booking book = new Booking(b.getBookNumber(), new Offer(b
+                                       .getOffer().getOfferNumber(), new RuralHouse(b.getOffer()
+                                       .getRuralHouse().getHouseName(), null, null, null, null),
+                                       null, null, 0), b.getClient(), b.getBookDate());
+                       book.setOffer(null);
+                       db.delete(book);
+                       db.commit();
+               } catch (Exception e) {
+                       e.printStackTrace();
+               } finally {
                        db.close();
-                       return ruralHouses;
-               } catch (NullPointerException e) {
-                       return null;
                }
 
        }
 
-       
+       public Vector<Booking> getOfBok(Offer o) {
+               if (c.isDatabaseLocal() == false)
+                       openSDB();
+               else
+                       openDB();
+
+               try {
+                       Offer of = (Offer) db.queryByExample(
+                                       new Offer(0, o.getRuralHouse(), null, null, 0)).get(0);
+                       Booking proto = new Booking(0, of, null, null);
+                       ObjectSet<Booking> result = db.queryByExample(proto);
+                       return new Vector<Booking>(result);
+               } finally {
+                       db.close();
+               }
+       }
 }