4 import java.rmi.RemoteException;
6 import java.util.Vector;
7 //import java.util.Enumeration;
8 //import java.util.Vector;
10 import businessLogic.BookingManager;
14 import configuration.Config;
16 import exceptions.OfferCanNotBeBooked;
18 public class DB4oManager {
20 private static ObjectContainer db;
21 private static DB4oManager theDB4oManager = new DB4oManager();
26 private DB4oManager() {
27 Config c = Config.getInstance();
28 String dataBaseOpenMode = c.getDataBaseOpenMode();
29 DB4oManager.openDatabase(dataBaseOpenMode);
35 public static void openDatabase(String mode) {
36 Config c = Config.getInstance();
37 String db4oFileName = c.getDb4oFilename();
38 if (mode.compareTo("open") == 0) {
39 db = Db4o.openFile(Db4o.newConfiguration(), db4oFileName);
40 db.ext().configure().updateDepth(5);
43 } else if (mode.compareTo("initialize") == 0) {
45 new File(db4oFileName).delete();
46 db = Db4o.openFile(Db4o.newConfiguration(), db4oFileName);
47 db.ext().configure().updateDepth(5);
48 Owner jon = new Owner("Jon");
49 Owner alfredo = new Owner("Alfredo");
50 jon.addRuralHouse(1, "Ezkioko etxea", "Ezkio", 3, 3, 3, 3, 3);
51 jon.addRuralHouse(2, "Eskiatzeko etxea", "Jaca", 4, 4, 4, 4, 4);
52 jon.setBankAccount("1349 5677 21 2133567777");
53 alfredo.addRuralHouse(3, "Casa del abuelo", "Pitillas", 5, 5,
55 alfredo.addRuralHouse(4,"", "Murgia", 6, 6, 6, 6, 6);
56 alfredo.setBankAccount("4144 0087 23 9700002133");
57 Account jonAcc = new Account("userJon", "passJon", jon);
58 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
65 System.out.println("DataBase Initialized");
76 public static ObjectContainer getContainer() {
84 public boolean storeRuralHouses(RuralHouse rh) {
85 DB4oManager.openDatabase("open");
86 boolean stored = false;
87 ObjectContainer db = DB4oManager.getContainer();
88 RuralHouse house = new RuralHouse(rh.getHouseNumber(), null, null,
91 ObjectSet<Owner> result = db.queryByExample(house);
92 if (result.isEmpty()) {
104 * This method finds all existing owners
108 public Vector<Owner> getOwners() throws RemoteException, Exception {
109 DB4oManager.openDatabase("open");
110 ObjectContainer db = DB4oManager.getContainer();
113 Owner proto = new Owner(null, null);
114 ObjectSet<Owner> result = db.queryByExample(proto);
115 Vector<Owner> owners = new Vector<Owner>();
116 while (result.hasNext())
117 owners.add((Owner) result.next());
129 * @throws RemoteException
132 public Vector<Account> getAccount(String usr, String pwd)
133 throws RemoteException, Exception {
134 DB4oManager.openDatabase("open");
135 ObjectContainer db = DB4oManager.getContainer();
138 Account proto = new Account(usr, pwd, new Owner(null, null));
139 ObjectSet<Account> result = db.queryByExample(proto);
140 Vector<Account> accounts = new Vector<Account>();
141 while (result.hasNext())
142 accounts.add((Account) result.next());
151 * @throws RemoteException
154 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
157 DB4oManager.openDatabase("open");
158 ObjectContainer db = DB4oManager.getContainer();
160 RuralHouse proto = new RuralHouse(0, null, null, null, null);
161 ObjectSet<RuralHouse> result = db.queryByExample(proto);
162 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
163 while (result.hasNext())
164 ruralHouses.add((RuralHouse) result.next());
172 * This method creates an offer with a house number, first day, last day and
173 * price precondition: There are no overlapping offers
176 * number, start day, last day and price
180 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
181 Date lastDay, float price) throws RemoteException, Exception {
182 DB4oManager.openDatabase("open");
183 ObjectContainer db = DB4oManager.getContainer();
186 RuralHouse proto = new RuralHouse(ruralHouse.getHouseNumber(),
187 null, ruralHouse.getDescription(), ruralHouse.getTown(),
188 ruralHouse.getFeatures());
189 ObjectSet<RuralHouse> result = db.queryByExample(proto);
190 RuralHouse rh = (RuralHouse) result.next();
191 o = rh.createOffer(firstDay, lastDay, price);
205 public RuralHouse getRuralHouse(RuralHouse rh) {
207 DB4oManager.openDatabase("open");
209 ObjectContainer db = DB4oManager.getContainer();
210 RuralHouse proto = new RuralHouse(rh.getHouseNumber(), null,
212 rh.getDescription(), rh.getTown(), rh.getFeatures());
213 ObjectSet<RuralHouse> result = db.queryByExample(proto);
214 return rh = (RuralHouse) result.next();
215 } catch (Exception exc) {
216 exc.printStackTrace();
226 * @param clientTelephoneNumber
228 * @throws OfferCanNotBeBooked
230 public Booking createBooking(Offer offer, String clientTelephoneNumber)
231 throws OfferCanNotBeBooked {
232 DB4oManager.openDatabase("open");
236 b = offer.createBook(clientTelephoneNumber);
242 } catch (Exception exc) {
243 exc.printStackTrace();
251 public void removeHouse(int houseNumber) {
252 ObjectContainer db = DB4oManager.getContainer();
253 RuralHouse house = new RuralHouse(houseNumber, null, null, null, null);
255 ObjectSet<RuralHouse> result = db.queryByExample(house);
256 if (!result.isEmpty()) {
257 RuralHouse found = (RuralHouse) result.get(0);
261 } catch (Exception exc) {
262 exc.printStackTrace();
270 * This method returns the instance of the DB4oManager class
272 * @return the db4o manager
274 public static DB4oManager getInstance() {
275 return theDB4oManager;