4 //import java.util.Enumeration;
5 //import java.util.Vector;
6 import java.rmi.RemoteException;
10 import java.util.LinkedList;
11 import java.util.List;
12 import java.util.ListIterator;
13 import java.util.Vector;
16 import com.db4o.Db4oEmbedded;
17 import com.db4o.ObjectContainer;
18 import com.db4o.ObjectSet;
19 import com.db4o.config.EmbeddedConfiguration;
20 import com.db4o.cs.Db4oClientServer;
21 import com.db4o.cs.config.ClientConfiguration;
22 import com.db4o.query.Predicate;
24 import configuration.ConfigXML;
25 import domain.Account;
26 import domain.Administrator;
27 import domain.Booking;
28 import domain.HouseFeatures;
30 //import dataModel.Offer;
32 import domain.RuralHouse;
33 import exceptions.OfferCanNotBeBooked;
34 import exceptions.OverlappingOfferExists;
36 public class DB4oManager {
38 private static ObjectContainer db;
39 private static EmbeddedConfiguration configuration;
40 private static ClientConfiguration configurationCS;
41 private int bookingNumber = 0; // if it is "static" then it is not
43 private int offerNumber = 0; // if it is "static" then it is not serialized
44 private static DB4oManager theDB4oManager = null;
46 private static DB4oManagerAux theDB4oManagerAux;
50 private DB4oManager() throws Exception {
51 theDB4oManagerAux = new DB4oManagerAux(0, 0);
52 c = ConfigXML.getInstance();
53 System.out.println("Creating DB4oManager instance => isDatabaseLocal: "
54 + c.isDatabaseLocal() + " getDatabBaseOpenMode: "
55 + c.getDataBaseOpenMode());
57 if ((c.getDataBaseOpenMode().equals("initialize"))
58 && (c.isDatabaseLocal()))
59 new File(c.getDb4oFilename()).delete();
61 if (c.isDatabaseLocal()) {
63 System.out.println("DataBase opened");
64 } else // c.isDatabaseLocal==false
67 System.out.println("Remote DataBase opened");
69 if (c.getDataBaseOpenMode().equals("initialize")) {
71 System.out.println("DataBase initialized");
72 } else // c.getDataBaseOpenMode().equals("open")
75 ObjectSet res = db.queryByExample(DB4oManagerAux.class);
76 ListIterator listIter = res.listIterator();
77 if (listIter.hasNext())
78 theDB4oManagerAux = (DB4oManagerAux) res.next();
82 private static void openDB() {
83 configuration = Db4oEmbedded.newConfiguration();
84 configuration.common().activationDepth(c.getActivationDepth());
85 configuration.common().updateDepth(c.getUpdateDepth());
86 configuration.common().objectClass(Owner.class).cascadeOnDelete(true);
87 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
90 private void openSDB() {
92 configurationCS = Db4oClientServer.newClientConfiguration();
93 configurationCS.common().activationDepth(c.getActivationDepth());
94 configurationCS.common().updateDepth(c.getUpdateDepth());
95 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
96 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
97 c.getDatabasePort(), c.getUser(), c.getPassword());
101 class DB4oManagerAux {
105 DB4oManagerAux(int bookingNumber, int offerNumber) {
106 this.bookingNumber = bookingNumber;
107 this.offerNumber = offerNumber;
111 public static DB4oManager getInstance() throws Exception {
112 if (theDB4oManager == null)
113 theDB4oManager = new DB4oManager();
114 return theDB4oManager;
117 public void initializeDB() {
120 Owner jon = new Owner("Jon");
121 Owner alfredo = new Owner("Alfredo");
122 jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3,
124 jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4,
126 jon.setBankAccount("1349 5677 21 2133567777");
127 alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, 5,
130 alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6);
131 alfredo.setBankAccount("4144 0087 23 9700002133");
132 Account jonAcc = new Account("userJon", "passJon", jon);
133 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
136 Account admin = new Account("admin","admin", true);
137 db.store(Administrator.giveAdmin());
141 db.store(alfredoAcc);
149 public void deleteDB() {
151 if (c.isDatabaseLocal() == false)
157 Owner proto = new Owner(null, null);
158 ObjectSet result = db.queryByExample(proto);
159 Vector<Owner> owners = new Vector<Owner>();
160 while (result.hasNext()) {
161 Owner o = (Owner) result.next();
162 System.out.println("Deleted owner: " + o.toString());
171 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
172 Date lastDay, float price) throws RemoteException, Exception {
175 if (c.isDatabaseLocal() == false)
182 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
184 ObjectSet<RuralHouse> result = db.queryByExample(proto);
185 RuralHouse rh = (RuralHouse) result.next();
186 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
188 db.store(theDB4oManagerAux); // To store the new value for
193 } catch (com.db4o.ext.ObjectNotStorableException e) {
195 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
203 public void deleteOffer(Offer offer) throws RemoteException,
205 if (c.isDatabaseLocal() == false)
211 ObjectSet<Offer> of = db.queryByExample(offer);
212 RuralHouse rh =of.get(0).getRuralHouse();
213 System.out.println(rh.offers.remove(of.get(0)));
217 } catch (com.db4o.ext.ObjectNotStorableException e) {
219 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
226 public LinkedList<RuralHouse>[] getAdminData(){
227 if (c.isDatabaseLocal() == false)
231 LinkedList<RuralHouse>[] ret = new LinkedList[2];
235 List<Administrator> admL = db.query(new Predicate<Administrator>(){
236 public boolean match(Administrator admin){
241 ret[0] = admL.get(0).getAddRequest();
242 ret[1] = admL.get(0).getRemoveRequest();
252 public void storeAdmin() {
253 if (c.isDatabaseLocal() == false)
259 List<Administrator> admL = db.query(new Predicate<Administrator>(){
260 public boolean match(Administrator admin){
265 admL.get(0).setAddRequest(Administrator.getAddRequest());
266 admL.get(0).setRemoveRequest(Administrator.getRemoveRequest());
282 * This method creates a book with a corresponding parameters
285 * day, last day, house number and telephone
288 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
289 Date lastDate, String bookTelephoneNumber)
290 throws OfferCanNotBeBooked {
292 if (c.isDatabaseLocal() == false)
302 if (c.isDatabaseLocal() == false)
305 RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null,
306 ruralHouse.getDescription(), ruralHouse.getDistrict(), null);
307 ObjectSet result = db.queryByExample(proto);
308 RuralHouse rh = (RuralHouse) result.next();
311 offer = rh.findOffer(firstDate, lastDate);
314 offer.createBooking(theDB4oManagerAux.bookingNumber++,
315 bookTelephoneNumber);
316 db.store(theDB4oManagerAux); // To store the new value for
320 bok = offer.getBooking();
323 } catch (com.db4o.ext.ObjectNotStorableException e) {
325 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
326 } catch (Exception exc) {
327 exc.printStackTrace();
335 * This method existing owners
338 public Vector<Owner> getOwners() throws RemoteException, Exception {
340 if (c.isDatabaseLocal() == false)
346 Owner proto = new Owner(null, null);
347 ObjectSet<Owner> result = db.queryByExample(proto);
348 Vector<Owner> owners = new Vector<Owner>();
349 while (result.hasNext())
350 owners.add((Owner) result.next());
357 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
360 if (c.isDatabaseLocal() == false)
366 RuralHouse proto = new RuralHouse(null, null, null, null, null);
367 ObjectSet result = db.queryByExample(proto);
368 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
369 while (result.hasNext())
370 ruralHouses.add((RuralHouse) result.next());
377 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
378 Date lastDay) throws RemoteException, OverlappingOfferExists {
380 if (c.isDatabaseLocal() == false)
387 RuralHouse rhn = (RuralHouse) db.queryByExample(
388 new RuralHouse(rh.getHouseName(), null, null, null, null))
390 if (rhn.overlapsWith(firstDay, lastDay) != null)
391 throw new OverlappingOfferExists();
399 public static ObjectContainer getContainer() {
403 public void close() {
405 System.out.println("DataBase closed");
408 public String toString() {
409 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
416 * @throws RemoteException
419 public Vector<Account> getAccount(String usr, String pwd)
420 throws RemoteException, Exception {
422 if (c.isDatabaseLocal() == false)
428 Account proto = new Account(usr, pwd, null);
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<Owner> result = db.queryByExample(house);
454 if (result.isEmpty()) {
459 db.delete(result.get(0));
470 public void removeHouse(RuralHouse rh, Owner owner) {
472 if (c.isDatabaseLocal() == false)
477 ObjectSet<Owner> result = db.queryByExample(owner);
478 ObjectSet<RuralHouse> rhs = db.queryByExample(rh);
479 if (!rhs.isEmpty()) {
480 Owner found = result.get(0);
481 found.getRuralHouses().remove(rhs.get(0));
485 } catch (Exception exc) {
486 exc.printStackTrace();
494 public Vector<RuralHouse> getRuralHouses(String name, String town,
495 int nBed, int nKit, int nBath, int nPark, int nLiv) {
496 HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark);
497 RuralHouse rh = new RuralHouse(name, null, null, town, fea);
498 if (c.isDatabaseLocal() == false)
504 ObjectSet<RuralHouse> result = db.queryByExample(rh);
505 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
506 while (result.hasNext())
507 ruralHouses.add(result.next());
510 } catch (NullPointerException e) {