package project; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import exceptions.CategoryInvalidException; import exceptions.DateInvalidException; import exceptions.LoginInvalidException; import exceptions.MailInvalidException; import exceptions.PasswordInvalidException; import exceptions.PriceInvalidException; import exceptions.TitleInvalidException; import exceptions.UsernameEmailEmptyException; public class User { static int idCounter; public static ArrayList<User> users = new ArrayList<User>(); private ArrayList<Item> myItem = new ArrayList<Item>(); private int id; private String username, email, password; public User() { username = ""; email = ""; password = ""; this.id = idCounter++; users.add(this); } public User(int id) { username = ""; email = ""; password = ""; this.id = id; users.add(this); } public User(String usernameInput, String mailInput, String passwordInput) { username = usernameInput; email = mailInput; password = passwordInput; this.id = idCounter++; users.add(this); } public static User getInstance() { User u = new User(); return u; } public static boolean login(String username, String email, String password) throws UsernameEmailEmptyException, PasswordInvalidException, MailInvalidException, LoginInvalidException { if (username.equals("") && email.equals("")) { throw new UsernameEmailEmptyException(); } else { if (password.equals("")) { throw new PasswordInvalidException(); } else if (!username.equals("")) { User toCheck = null; for (User u : users) { if (u.username.equals(username)) { toCheck = u; } } if (toCheck == null) { throw new LoginInvalidException(); } else { if (password.equals(toCheck.password)) { return true; } else { throw new LoginInvalidException(); } } } else if (!email.matches("\\S+@\\S+\\.\\S+")) { throw new MailInvalidException(); } else { User toCheck = null; for (User u : users) { if (u.email.equals(email)) { toCheck = u; } } if (toCheck == null) { throw new LoginInvalidException(); } else { if (password.equals(toCheck.password)) { return true; } else { throw new LoginInvalidException(); } } } } } public ArrayList<Auction> retrieveSubscribedAuction() { // TODO Auto-generated method stub return null; } public ArrayList<Item> searchItem(String title, String category) throws CategoryInvalidException, TitleInvalidException { if (!title.matches("^[a-zA-Z\\s]+$") || title.length() > 30 || title.length() < 1) { throw new TitleInvalidException(); } else { Category c = Category.getCategory(category); if (c == null) { throw new CategoryInvalidException(); } else { ArrayList<Item> toReturn = new ArrayList<Item>(); for (Item i : Item.items) { if (i.getTitle().equals(title) && i.getCategory().equals(c)) { toReturn.add(i); } } return toReturn; } } } public ArrayList<Auction> searchAuction(String startTime, String endTime, double price, String title, String category) throws CategoryInvalidException, TitleInvalidException, DateInvalidException, PriceInvalidException { String format = "dd/MM/yyyy hh:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(format); Date start, end; if (!title.matches("^[a-zA-Z]+$") || title.length() > 30 || title.length() < 1) { throw new TitleInvalidException(); } else { Category c = Category.getCategory(category); if (c == null) { throw new CategoryInvalidException(); } else if (!Seller.isValidFormat(format, startTime) || !Seller.isValidFormat(format, endTime)) { throw new DateInvalidException(); } else if (price <= 0) { throw new PriceInvalidException(); } else { try { start = sdf.parse(startTime); end = sdf.parse(endTime); } catch (ParseException p) { throw new DateInvalidException(); } ArrayList<Auction> toReturn = new ArrayList<Auction>(); for (Auction a : Auction.auctions) { if (a.getTitle().equals(title) || a.getCategory().equals(c) || a.getStart().equals(start) || a.getEnd().equals(end) || a.getPrice() - price <= 0.01) { toReturn.add(a); } } return toReturn; } } } public boolean addItem(int itemId) { if (myItem.contains(Item.getItem(itemId))) { return myItem.add(Item.getItem(itemId)); } return false; } public void setId(int i) { this.id = i; } public int getId() { return id; } public void setUsername(String usernameInput) { this.username = usernameInput; } public void setEmail(String emailInput) { this.email = emailInput; } public void setPassword(String passwordInput) { this.password = passwordInput; } public static User getUserById(int user) { for (User u : users) { if (u.getId() == user) { return u; } } return null; } }