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);
42 } else if (mode.compareTo("initialize") == 0) {
44 new File(db4oFileName).delete();
45 db = Db4o.openFile(Db4o.newConfiguration(), db4oFileName);
46 db.ext().configure().updateDepth(5);
47 Owner jon = new Owner("Jon");
48 Owner alfredo = new Owner("Alfredo");
49 jon.addRuralHouse(1, "Ezkioko etxea", "Ezkio", 3, 3, 3, 3, 3);
50 jon.addRuralHouse(2, "Eskiatzeko etxea", "Jaca", 4, 4, 4, 4, 4);
51 jon.setBankAccount("1349 5677 21 2133567777");
52 alfredo.addRuralHouse(3, "Casa del abuelo", "Pitillas", 5, 5,
54 alfredo.addRuralHouse(4, "Murgia", 6, 6, 6, 6, 6);
55 alfredo.setBankAccount("4144 0087 23 9700002133");
56 Account jonAcc = new Account("userJon", "passJon", jon);
57 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
64 System.out.println("DataBase Initialized");
75 public static ObjectContainer getContainer() {
82 public boolean storeRuralHouses(RuralHouse rh) {
83 DB4oManager.openDatabase("open");
84 boolean stored = false;
85 ObjectContainer db = DB4oManager.getContainer();
86 RuralHouse house = new RuralHouse(rh.getHouseNumber(), null, null,
89 ObjectSet<Owner> result = db.queryByExample(house);
90 if (result.isEmpty()) {
102 * This method finds all existing owners
105 public Vector<Owner> getOwners() throws RemoteException, Exception {
106 DB4oManager.openDatabase("open");
107 ObjectContainer db = DB4oManager.getContainer();
110 Owner proto = new Owner(null, null);
111 ObjectSet<Owner> result = db.queryByExample(proto);
112 Vector<Owner> owners = new Vector<Owner>();
113 while (result.hasNext())
114 owners.add((Owner) result.next());
125 * @throws RemoteException
128 public Vector<Account> getAccount(String usr, String pwd)
129 throws RemoteException, Exception {
130 DB4oManager.openDatabase("open");
131 ObjectContainer db = DB4oManager.getContainer();
134 Account proto = new Account(usr, pwd, new Owner(null, null));
135 ObjectSet<Account> result = db.queryByExample(proto);
136 Vector<Account> accounts = new Vector<Account>();
137 while (result.hasNext())
138 accounts.add((Account) result.next());
147 * @throws RemoteException
150 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
152 DB4oManager.openDatabase("open");
153 ObjectContainer db = DB4oManager.getContainer();
155 RuralHouse proto = new RuralHouse(0, null, null, null, null);
156 ObjectSet<RuralHouse> result = db.queryByExample(proto);
157 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
158 while (result.hasNext())
159 ruralHouses.add((RuralHouse) result.next());
167 * This method creates an offer with a house number, first day, last day and
168 * price precondition: There are no overlapping offers
171 * number, start day, last day and price
174 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
175 Date lastDay, float price) throws RemoteException, Exception {
176 DB4oManager.openDatabase("open");
177 ObjectContainer db = DB4oManager.getContainer();
180 RuralHouse proto = new RuralHouse(ruralHouse.getHouseNumber(),
181 null, ruralHouse.getDescription(), ruralHouse.getTown(),
182 ruralHouse.getFeatures());
183 ObjectSet<RuralHouse> result = db.queryByExample(proto);
184 RuralHouse rh = (RuralHouse) result.next();
185 o = rh.createOffer(firstDay, lastDay, price);
198 public RuralHouse getRuralHouse(RuralHouse rh) {
200 DB4oManager.openDatabase("open");
202 ObjectContainer db = DB4oManager.getContainer();
203 RuralHouse proto = new RuralHouse(rh.getHouseNumber(), null,
204 rh.getDescription(), rh.getTown(), rh.getFeatures());
205 ObjectSet<RuralHouse> result = db.queryByExample(proto);
206 return rh = (RuralHouse) result.next();
207 } catch (Exception exc) {
208 exc.printStackTrace();
217 * @param clientTelephoneNumber
219 * @throws OfferCanNotBeBooked
221 public Booking createBooking(Offer offer, String clientTelephoneNumber)
222 throws OfferCanNotBeBooked {
223 DB4oManager.openDatabase("open");
227 b = offer.createBook(clientTelephoneNumber);
233 } catch (Exception exc) {
234 exc.printStackTrace();
241 public void removeHouse(int houseNumber) {
242 ObjectContainer db = DB4oManager.getContainer();
243 RuralHouse house = new RuralHouse(houseNumber, null, null, null, null);
245 ObjectSet<RuralHouse> result = db.queryByExample(house);
246 if (!result.isEmpty()) {
247 RuralHouse found = (RuralHouse) result.get(0);
251 } catch (Exception exc) {
252 exc.printStackTrace();
260 * This method returns the instance of the DB4oManager class
262 * @return the db4o manager
264 public static DB4oManager getInstance() {
265 return theDB4oManager;