DB server side improved some problems when showing bookings remain
[RRRRHHHH_Code] / ruralHouses / src / dataAccess / DB4oManager.java
index b0513ae..403c916 100644 (file)
@@ -81,11 +81,19 @@ public class DB4oManager {
                configuration = Db4oEmbedded.newConfiguration();
                configuration.common().activationDepth(c.getActivationDepth());
                configuration.common().updateDepth(c.getUpdateDepth());
-               configuration.common().objectClass(Owner.class).cascadeOnUpdate(true);
                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());
        }
 
@@ -95,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());
 
@@ -135,10 +160,8 @@ public class DB4oManager {
                        Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
                                        alfredo);
 
-
                        Account admin = new Account("admin", "admin", true);
                        db.store(Administrator.getInstance());
-
                        db.store(jonAcc);
                        db.store(alfredoAcc);
                        db.store(admin);
@@ -209,7 +232,7 @@ public class DB4oManager {
                try {
                        ObjectSet<Offer> of = db.queryByExample(offer);
                        RuralHouse rh = of.get(0).getRuralHouse();
-                       System.out.println(rh.offers.remove(of.get(0)));
+                       System.out.println(rh.getAllOffers().remove(of.get(0)));
                        db.store(rh);
                        db.commit();
 
@@ -221,9 +244,25 @@ public class DB4oManager {
                }
        }
 
+       public Vector<Offer> getRHsOffer(String name) {
+               if (c.isDatabaseLocal() == false)
+                       openSDB();
+               else
+                       openDB();
+
+               try {
+                       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 Administrator getAdminData() {
 
-       
-       public Administrator getAdminData(){
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
@@ -231,8 +270,7 @@ public class DB4oManager {
 
                try {
 
-                       
-                       List<Administrator> admL = db.query(new Predicate<Administrator>(){
+                       List<Administrator> admL = db.query(new Predicate<Administrator>() {
                                private static final long serialVersionUID = 1L;
 
                                public boolean match(Administrator admin) {
@@ -240,11 +278,8 @@ public class DB4oManager {
                                }
                        });
 
-                       
-                       
                        return admL.get(0);
-               }
-               finally {
+               } finally {
                        db.close();
 
                }
@@ -302,7 +337,7 @@ public class DB4oManager {
                else
                        openDB();
 
-               Vector<Booking> book = new Vector<Booking>() ;
+               Vector<Booking> book = new Vector<Booking>();
 
                try {
 
@@ -310,22 +345,23 @@ public class DB4oManager {
                                openSDB();
 
                        RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
-                                       ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
+                                       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++, cl);
                                db.store(theDB4oManagerAux); // To store the new value for
                                                                                                // bookingNumber
-                               
+
                                db.store(offer);
                                db.commit();
                                book = offer.getBookings();
-                               
+
                        }
 
                } catch (com.db4o.ext.ObjectNotStorableException e) {
@@ -362,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<RuralHouse> 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 {
 
@@ -404,10 +420,6 @@ public class DB4oManager {
                }
        }
 
-       public static ObjectContainer getContainer() {
-               return db;
-       }
-
        public void close() {
                db.close();
                System.out.println("DataBase closed");
@@ -501,10 +513,10 @@ public class DB4oManager {
 
        }
 
-       public Vector<RuralHouse> getRuralHouses(String name, String town,
-                       int nBed, int nKit, int nBath, int nPark, int nLiv) {
+       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, null, null, town, fea);
+               RuralHouse rh = new RuralHouse(name, ow, null, town, fea);
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
@@ -530,27 +542,46 @@ public class DB4oManager {
                        openDB();
 
                try {
-                       // TODO realize if there is another account with same username.
-                       // Quite difficult with the f***ing salt
-                       db.store(acc);
-                       db.commit();
+                       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();
                }
-               return true;
+               return false;
        }
 
-       // TODO remove account
+       public boolean removeAccount(Owner own) {
+               if (c.isDatabaseLocal() == false)
+                       openSDB();
+               else
+                       openDB();
 
-       public boolean removeAccount(Account acc) {
+               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;
        }
-       
-       //TODO this method should be improved.
-       public void acceptBooking(Offer of){
-               Offer off = new Offer(of.getOfferNumber(),of.getRuralHouse(),of.getFirstDay(),of.getLastDay(),of.getPrice());
+
+       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
@@ -558,32 +589,55 @@ public class DB4oManager {
 
                try {
                        ObjectSet<Offer> result = db.queryByExample(off);
-                       this.deleteOffer(result.get(0));
-                       db.store(of);
+                       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();;
-               }               
+                       e.printStackTrace();
+                       ;
+               }
        }
-       
-       public void removeBooking(Booking b){
+
+       public void removeBooking(Booking b) {
                if (c.isDatabaseLocal() == false)
                        openSDB();
                else
                        openDB();
                try {
-                       ObjectSet<Booking> result = db.queryByExample(b);
-                       ObjectSet<Client> result2= db.queryByExample(b.getClient());
-                       db.delete(result.get(0));
-                       db.delete(result2.get(0));
+                       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{
+                       e.printStackTrace();
+               } finally {
                        db.close();
                }
 
-               
+       }
+
+       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();
+               }
        }
 }