4 //import java.util.Enumeration;
5 //import java.util.Vector;
7 import java.rmi.RemoteException;
9 import java.util.HashSet;
10 import java.util.ListIterator;
11 import java.util.Vector;
14 import com.db4o.config.EmbeddedConfiguration;
15 import com.db4o.cs.Db4oClientServer;
16 import com.db4o.cs.config.ClientConfiguration;
18 import configuration.ConfigXML;
19 import domain.Account;
20 import domain.Booking;
22 //import dataModel.Offer;
24 import domain.RuralHouse;
25 import exceptions.OfferCanNotBeBooked;
26 import exceptions.OverlappingOfferExists;
28 public class DB4oManager {
30 private static ObjectContainer db;
31 private static EmbeddedConfiguration configuration;
32 private static ClientConfiguration configurationCS;
33 private int bookingNumber = 0; // if it is "static" then it is not
35 private int offerNumber = 0; // if it is "static" then it is not serialized
36 private static DB4oManager theDB4oManager = null;
38 private static DB4oManagerAux theDB4oManagerAux;
41 private DB4oManager() throws Exception {
42 theDB4oManagerAux = new DB4oManagerAux(0, 0);
43 c = ConfigXML.getInstance();
44 System.out.println("Creating DB4oManager instance => isDatabaseLocal: "
45 + c.isDatabaseLocal() + " getDatabBaseOpenMode: "
46 + c.getDataBaseOpenMode());
48 if ((c.getDataBaseOpenMode().equals("initialize"))
49 && (c.isDatabaseLocal()))
50 new File(c.getDb4oFilename()).delete();
52 if (c.isDatabaseLocal()) {
53 configuration = Db4oEmbedded.newConfiguration();
54 configuration.common().activationDepth(c.getActivationDepth());
55 configuration.common().updateDepth(c.getUpdateDepth());
56 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
57 System.out.println("DataBase opened");
58 } else // c.isDatabaseLocal==false
60 openObjectContainer();
62 if (c.getDataBaseOpenMode().equals("initialize")) {
64 System.out.println("DataBase initialized");
65 } else // c.getDataBaseOpenMode().equals("open")
68 ObjectSet res = db.queryByExample(DB4oManagerAux.class);
69 ListIterator listIter = res.listIterator();
70 if (listIter.hasNext())
71 theDB4oManagerAux = (DB4oManagerAux) res.next();
75 private static void openDB() {
76 configuration = Db4oEmbedded.newConfiguration();
77 configuration.common().activationDepth(c.getActivationDepth());
78 configuration.common().updateDepth(c.getUpdateDepth());
79 db = Db4oEmbedded.openFile(configuration, c.getDb4oFilename());
82 private void openObjectContainer() {
84 configurationCS = Db4oClientServer.newClientConfiguration();
85 configurationCS.common().activationDepth(c.getActivationDepth());
86 configurationCS.common().updateDepth(c.getUpdateDepth());
87 configurationCS.common().objectClass(Owner.class).cascadeOnDelete(true);
88 db = Db4oClientServer.openClient(configurationCS, c.getDatabaseNode(),
89 c.getDatabasePort(), c.getUser(), c.getPassword());
93 class DB4oManagerAux {
97 DB4oManagerAux(int bookingNumber, int offerNumber) {
98 this.bookingNumber = bookingNumber;
99 this.offerNumber = offerNumber;
103 public static DB4oManager getInstance() throws Exception {
104 if (theDB4oManager == null)
105 theDB4oManager = new DB4oManager();
106 return theDB4oManager;
109 public void initializeDB() {
112 Owner jon = new Owner("Jon");
113 Owner alfredo = new Owner("Alfredo");
114 jon.addRuralHouse(1, "Ezkioko etxea", "Ezkio", 3, 3, 3, 3, 3);
115 jon.addRuralHouse(2, "Eskiatzeko etxea", "Jaca", 4, 4, 4, 4, 4);
116 jon.setBankAccount("1349 5677 21 2133567777");
117 alfredo.addRuralHouse(3, "Casa del abuelo", "Pitillas", 5, 5, 5, 5,
119 alfredo.addRuralHouse(4, "", "Murgia", 6, 6, 6, 6, 6);
120 alfredo.setBankAccount("4144 0087 23 9700002133");
121 Account jonAcc = new Account("userJon", "passJon", jon);
122 Account alfredoAcc = new Account("userAlfredo", "passAlfredo",
127 db.store(alfredoAcc);
134 @SuppressWarnings("finally")
135 public Offer createOffer(RuralHouse ruralHouse, Date firstDay,
136 Date lastDay, float price) throws RemoteException, Exception {
140 if (c.isDatabaseLocal() == false)
141 openObjectContainer();
143 RuralHouse proto = new RuralHouse(ruralHouse.getHouseNumber(),
144 null, null, null, null);
145 ObjectSet result = db.queryByExample(proto);
146 RuralHouse rh = (RuralHouse) result.next();
147 o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay,
149 db.store(theDB4oManagerAux); // To store the new value for
154 } catch (com.db4o.ext.ObjectNotStorableException e) {
156 .println("Error: com.db4o.ext.ObjectNotStorableException in createOffer");
162 public void deleteDB() {
165 Owner proto = new Owner(null, null);
166 ObjectSet result = db.queryByExample(proto);
167 Vector<Owner> owners = new Vector<Owner>();
168 while (result.hasNext()) {
169 Owner o = (Owner) result.next();
170 System.out.println("Deleted owner: " + o.toString());
180 * This method creates a book with a corresponding parameters
183 * day, last day, house number and telephone
186 public Booking createBooking(RuralHouse ruralHouse, Date firstDate,
187 Date lastDate, String bookTelephoneNumber)
188 throws OfferCanNotBeBooked {
192 if (c.isDatabaseLocal() == false)
193 openObjectContainer();
195 RuralHouse proto = new RuralHouse(ruralHouse.getHouseNumber(),
196 null, ruralHouse.getDescription(), ruralHouse.getTown(),
198 ObjectSet result = db.queryByExample(proto);
199 RuralHouse rh = (RuralHouse) result.next();
202 offer = rh.findOffer(firstDate, lastDate);
205 offer.createBooking(theDB4oManagerAux.bookingNumber++,
206 bookTelephoneNumber);
207 db.store(theDB4oManagerAux); // To store the new value for
211 return offer.getBooking();
215 } catch (com.db4o.ext.ObjectNotStorableException e) {
217 .println("Error: com.db4o.ext.ObjectNotStorableException in createBooking");
219 } catch (Exception exc) {
220 exc.printStackTrace();
226 * This method existing owners
229 public Vector<Owner> getOwners() throws RemoteException, Exception {
231 if (c.isDatabaseLocal() == false)
232 openObjectContainer();
235 Owner proto = new Owner(null, null);
236 ObjectSet result = db.queryByExample(proto);
237 Vector<Owner> owners = new Vector<Owner>();
238 while (result.hasNext())
239 owners.add((Owner) result.next());
246 public Vector<RuralHouse> getAllRuralHouses() throws RemoteException,
248 if (c.isDatabaseLocal() == false)
249 openObjectContainer();
252 RuralHouse proto = new RuralHouse(0, null, null, null, null);
253 ObjectSet result = db.queryByExample(proto);
254 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
255 while (result.hasNext())
256 ruralHouses.add((RuralHouse) result.next());
263 public boolean existsOverlappingOffer(RuralHouse rh, Date firstDay,
264 Date lastDay) throws RemoteException, OverlappingOfferExists {
266 if (c.isDatabaseLocal() == false)
267 openObjectContainer();
269 RuralHouse rhn = (RuralHouse) db
271 new RuralHouse(rh.getHouseNumber(), null, null,
273 if (rhn.overlapsWith(firstDay, lastDay) != null)
274 throw new OverlappingOfferExists();
282 public static ObjectContainer getContainer() {
286 public void close() {
288 System.out.println("DataBase closed");
291 public String toString() {
292 return "bookingNumber=" + bookingNumber + " offerNumber=" + offerNumber;
299 * @throws RemoteException
302 public Vector<Account> getAccount(String usr, String pwd)
303 throws RemoteException, Exception {
304 if (c.isDatabaseLocal() == false)
305 openObjectContainer();
307 Account proto = new Account(usr, pwd, new Owner(null, null));
308 ObjectSet<Account> result = db.queryByExample(proto);
309 Vector<Account> accounts = new Vector<Account>();
310 while (result.hasNext())
311 accounts.add((Account) result.next());
321 public boolean storeRuralHouses(RuralHouse rh) {
322 // DB4oManager.openDB();
323 if (c.isDatabaseLocal() == false)
324 openObjectContainer();
325 boolean stored = false;
326 RuralHouse house = new RuralHouse(rh.getHouseNumber(), null, null,
329 ObjectSet<Owner> result = db.queryByExample(house);
330 if (result.isEmpty()) {
341 public void removeHouse(int houseNumber) {
342 // DB4oManager.openDB();
343 if (c.isDatabaseLocal() == false)
344 openObjectContainer();
345 RuralHouse house = new RuralHouse(houseNumber, null, null, null, null);
347 ObjectSet<RuralHouse> result = db.queryByExample(house);
348 if (!result.isEmpty()) {
349 RuralHouse found = (RuralHouse) result.get(0);
353 } catch (Exception exc) {
354 exc.printStackTrace();
361 public Vector<RuralHouse> getRuralHousesByTown(String town){
362 RuralHouse rh = new RuralHouse(0,null,null,town,null);
363 if (c.isDatabaseLocal() == false)
364 openObjectContainer();
366 ObjectSet<RuralHouse> result = db.queryByExample(rh);
367 Vector<RuralHouse> ruralHouses = new Vector<RuralHouse>();
368 while(result.hasNext())
369 ruralHouses.add(result.next());