diff options
Diffstat (limited to 'Week9/src/com/camilstaps/shop/Database.java')
-rw-r--r-- | Week9/src/com/camilstaps/shop/Database.java | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/Week9/src/com/camilstaps/shop/Database.java b/Week9/src/com/camilstaps/shop/Database.java deleted file mode 100644 index 8344bca..0000000 --- a/Week9/src/com/camilstaps/shop/Database.java +++ /dev/null @@ -1,393 +0,0 @@ -/** - * Copyright (c) 2015 Camil Staps <info@camilstaps.nl> - * See the LICENSE file for copying permission. - */ - -package com.camilstaps.shop; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.HashSet; -import java.util.Set; -import java.util.regex.Pattern; - -/** - * The Shop database - * @author Camil Staps, s4498062 - */ -public class Database { - - /** - * This is a singleton - */ - private static Database instance; - - /** - * Keep the database in working memory during runtime - */ - private Set<User> users; - private Set<Article> articles; - private Set<Category> categories; - private Set<Order> orders; - - /** - * Files to store the database - * Considering backups, it's nicer to have different objects stored in - * different files, so that if the Orders file breaks, we still have the - * Users, etc. - */ - private final File FILE_DB = new File("./db"); - private final File FILE_USERS = new File("./db/users.db"); - private final File FILE_ARTICLES = new File("./db/articles.db"); - private final File FILE_CATEGORIES = new File("./db/categories.db"); - private final File FILE_ORDERS = new File("./db/orders.db"); - - /** - * Don't use this constructor. This is a singleton: use getInstance() instead. - * @see self#getInstance() - */ - public Database() { - if (!FILE_DB.exists()) - FILE_DB.mkdir(); - - readUsers(); - readArticles(); - readCategories(); - readOrders(); - } - - /** - * Get an instance of the database. This is a singleton. - * @return the database - */ - public static Database getInstance() { - if (instance == null) { - instance = new Database(); - } - return instance; - } - - /** - * Add an item to the database - * @param item the item - * @throws com.camilstaps.shop.DuplicateEntryException - * @throws ClassCastException if the item to remove is not a DatabaseItem - */ - public void addItem(DatabaseItem item) throws DuplicateEntryException { - if (item instanceof User) { - if (isUserExists(((User) item).getNr())) { - throw new DuplicateEntryException(); - } - users.add((User) item); - } else if (item instanceof Article) { - if (isArticleExists(((Article) item).getName())) { - throw new DuplicateEntryException(); - } - articles.add((Article) item); - } else if (item instanceof Category) { - if (isCategoryExists(((Category) item).getName())) { - throw new DuplicateEntryException(); - } - categories.add((Category) item); - } else if (item instanceof Order) { - orders.add((Order) item); - } else { - throw new ClassCastException(); - } - } - - /** - * Remove an item from the database - * @param item the item to remove - * @throws ClassCastException if the item to remove is not a DatabaseItem - */ - public void removeItem(DatabaseItem item) { - if (item instanceof User) { - users.remove((User) item); - } else if (item instanceof Article) { - articles.remove((Article) item); - } else if (item instanceof Category) { - categories.remove((Category) item); - } else if (item instanceof Order) { - orders.remove((Order) item); - } else { - throw new ClassCastException(); - } - } - - /** - * Save the database to the filesystem. - * @return true on success, false on failure - */ - public boolean write() { - return writeUsers() && writeArticles() && writeCategories() && writeOrders(); - } - - /** - * Check if there exists a user with a certain U/S-number - * @param nr - * @return - */ - public boolean isUserExists(String nr) { - for (User user : users) { - if (user.getNr().equals(nr)) { - return true; - } - } - return false; - } - - /** - * Check if an article with a name exists - * @param name - * @return - */ - public boolean isArticleExists(String name) { - for (Article article : articles) { - if (article.getName().equals(name)) { - return true; - } - } - return false; - } - - /** - * Check if a category with a name exists - * @param name - * @return - */ - public boolean isCategoryExists(String name) { - for (Category category : categories) { - if (category.getName().equals(name)) { - return true; - } - } - return false; - } - - /** - * Get the set of users - * @return - */ - public Set<User> getUsers() { - return users; - } - - /** - * Get the set of articles - * @return - */ - public Set<Article> getArticles() { - return articles; - } - - /** - * Get the set of categories - * @return - */ - public Set<Category> getCategories() { - return categories; - } - - /** - * Get an array of the names of the categories - * @return - */ - public String[] getCategoryNames() { - String[] categoryNames = new String[categories.size()]; - int i = 0; - for (Category c : categories) { - categoryNames[i++] = c.getName(); - } - return categoryNames; - } - - /** - * Get the set of orders - * @return - */ - public Set<Order> getOrders() { - return orders; - } - - /** - * Get the set of articles of which the name or description matches a regular expression - * @param p the regular expression - * @return - */ - public Set<Article> searchArticle(Pattern p) { - Set<Article> result = new HashSet<>(); - for (Article a : articles) { - if (p.matcher(a.getName()).find() || p.matcher(a.getDescription()).find()) { - result.add(a); - } - } - return result; - } - - /** - * Get a user by his number - * @param number - * @return - * @throws com.camilstaps.shop.ItemNotFoundException - */ - public User getUser(String number) throws ItemNotFoundException { - for (User u : users) { - if (u.getNr().equals(number)) { - return u; - } - } - throw new ItemNotFoundException(); - } - - /** - * Get an article by its name - * @param name - * @return - * @throws ItemNotFoundException - */ - public Article getArticle(String name) throws ItemNotFoundException { - for (Article a : articles) { - if (a.getName().equals(name)) { - return a; - } - } - throw new ItemNotFoundException(); - } - - /** - * Get a category by a name - * @param name - * @return - */ - public Category getCategory(String name) throws ItemNotFoundException { - for (Category c : categories) { - if (c.getName().equals(name)) { - return c; - } - } - throw new ItemNotFoundException(); - } - - /** - * Read the users from the database into RAM - */ - private void readUsers() { - users = new HashSet<>(); - try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(FILE_USERS))) { - users = (Set) in.readObject(); - in.close(); - } catch (FileNotFoundException ex) { - } catch (IOException | ClassNotFoundException ex) { - } - } - - /** - * Read the articles from the database into RAM - */ - private void readArticles() { - articles = new HashSet<>(); - try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(FILE_ARTICLES))) { - articles = (Set) in.readObject(); - in.close(); - } catch (FileNotFoundException ex) { - } catch (IOException | ClassNotFoundException ex) { - } - } - - /** - * Read the categories from the database into RAM - */ - private void readCategories() { - categories = new HashSet<>(); - try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(FILE_CATEGORIES))) { - categories = (Set) in.readObject(); - in.close(); - } catch (FileNotFoundException ex) { - } catch (IOException | ClassNotFoundException ex) { - } - } - - /** - * Read the orders from the database into RAM - */ - private void readOrders() { - orders = new HashSet<>(); - try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(FILE_ORDERS))) { - orders = (Set) in.readObject(); - in.close(); - } catch (FileNotFoundException ex) { - } catch (IOException | ClassNotFoundException ex) { - } - } - - /** - * Write the users from RAM to the database - */ - private boolean writeUsers() { - System.err.println("Saving users..."); - - try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FILE_USERS))) { - out.writeObject(users); - out.close(); - return true; - } catch (IOException ex) { - ex.printStackTrace(); - } - return false; - } - - /** - * Write the articles from RAM to the database - */ - private boolean writeArticles() { - System.err.println("Saving articles..."); - - try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FILE_ARTICLES))) { - out.writeObject(articles); - out.close(); - return true; - } catch (IOException ex) { - ex.printStackTrace(); - } - return false; - } - - /** - * Write the categories from RAM to the database - */ - private boolean writeCategories() { - System.err.println("Saving categories..."); - - try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FILE_CATEGORIES))) { - out.writeObject(categories); - out.close(); - return true; - } catch (IOException ex) { - ex.printStackTrace(); - } - return false; - } - - /** - * Write the orders from RAM to the database - */ - private boolean writeOrders() { - System.err.println("Saving orders..."); - - try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(FILE_ORDERS))) { - out.writeObject(orders); - out.close(); - return true; - } catch (IOException ex) { - ex.printStackTrace(); - } - return false; - } - -}
\ No newline at end of file |