diff --git a/.gitignore b/.gitignore index 48a9ee7..07e3800 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,10 @@ out/ ## VSCode ############################## .vscode/ + +############################## +## Misc +############################## +.settings/* +.project +.classpath diff --git a/pom.xml b/pom.xml index 5f7773d..6320c10 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,14 @@ commons-logging 1.3.5 - + + + tools.jackson.core + jackson-databind + 3.1.0 + compile + + @@ -91,6 +98,28 @@ maven-javadoc-plugin 3.12.0 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.6.1 + + + package + + shade + + + + + edu.group5.app.App + + + + + + diff --git a/src/main/java/edu/group5/app/App.java b/src/main/java/edu/group5/app/App.java index 7fd22a6..4f4364f 100644 --- a/src/main/java/edu/group5/app/App.java +++ b/src/main/java/edu/group5/app/App.java @@ -1,10 +1,15 @@ package edu.group5.app; +import edu.group5.app.control.OrgAPIWrapper; + /** * Hello world! */ public class App { - public static void main(String[] args) { - System.out.println("Hello World!"); - } + public static void main(String[] args) { + OrgAPIWrapper orgWrap = new OrgAPIWrapper("https://app.innsamlingskontrollen.no/api/public/v1/all"); + System.out.println(); + System.out.println(); + orgWrap.importData(); + } } diff --git a/src/main/java/edu/group5/app/control/OrgAPIWrapper.java b/src/main/java/edu/group5/app/control/OrgAPIWrapper.java new file mode 100644 index 0000000..9123c69 --- /dev/null +++ b/src/main/java/edu/group5/app/control/OrgAPIWrapper.java @@ -0,0 +1,42 @@ +package edu.group5.app.control; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; + +import tools.jackson.databind.ObjectMapper; + +public class OrgAPIWrapper extends Wrapper { + private String urlString; + private Object[] data; + + public OrgAPIWrapper(String urlString) { + this.urlString = urlString; + } + + @Override + public boolean importData() { + URI uri = URI.create(this.urlString); + HttpClient client = HttpClient.newHttpClient(); + HttpRequest request = HttpRequest.newBuilder() + .uri(uri) + .GET() + .build(); + + try { + HttpResponse response = client.send( + request, HttpResponse.BodyHandlers.ofString()); + this.data = new ObjectMapper().readValue(response.body(), Object[].class); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + @Override + public Object[] getData() { + return this.data; + } +} diff --git a/src/main/java/edu/group5/app/control/Wrapper.java b/src/main/java/edu/group5/app/control/Wrapper.java index 9655c26..e8a8365 100644 --- a/src/main/java/edu/group5/app/control/Wrapper.java +++ b/src/main/java/edu/group5/app/control/Wrapper.java @@ -1,5 +1,11 @@ package edu.group5.app.control; -public class Wrapper { - +abstract class Wrapper { + + protected Wrapper() { + } + + public abstract boolean importData(); + + public abstract Object getData(); } diff --git a/src/main/java/edu/group5/app/model/Repository.java b/src/main/java/edu/group5/app/model/Repository.java index 6850bfe..87d981a 100644 --- a/src/main/java/edu/group5/app/model/Repository.java +++ b/src/main/java/edu/group5/app/model/Repository.java @@ -6,10 +6,9 @@ * Represents a repository */ public abstract class Repository { - protected final Map content; + protected Map content; - public Repository(Map content) { - this.content = content; + protected Repository() { } /** diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java index 14a77d0..98e2f0a 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java @@ -1,6 +1,7 @@ package edu.group5.app.model.organization; import edu.group5.app.model.Repository; +import tools.jackson.databind.ObjectMapper; import java.util.HashMap; import java.util.Map; @@ -10,15 +11,34 @@ * Handles the business logic associated with organizations */ public class OrganizationRepository extends Repository { - /** - * Creates a new Organization Repository - * - * @param content holds all current organizations in the repository; must not be null - * @throws NullPointerException if content is null - */ - public OrganizationRepository(Map content) { - super(Objects.requireNonNull(content, "content cannot be null")); - } + + @SuppressWarnings("unchecked") + public OrganizationRepository(Object[] input) { + + if (input == null) { + throw new NullPointerException("Input cannot be null"); + } + for (Object obj : input) { + Map map = (Map) obj; + + int orgNumber = Integer.parseInt((String) map.get("org_number")); + String name = (String) map.get("name"); + + boolean trusted = + "approved".equalsIgnoreCase((String) map.get("status")); + String url = (String) map.get("url"); + + boolean isPreApproved = (Boolean) map.get("is_pre_approved"); + + Organization organization = new Organization( + orgNumber, name, trusted, url, + isPreApproved, + "" // description not included in API + ); + + content.put(orgNumber, organization); + } +} /** * Gets all trusted organizations in the repository diff --git a/src/main/java/edu/group5/app/model/user/UserService.java b/src/main/java/edu/group5/app/model/user/UserService.java new file mode 100644 index 0000000..5497e1a --- /dev/null +++ b/src/main/java/edu/group5/app/model/user/UserService.java @@ -0,0 +1,45 @@ +package edu.group5.app.model.user; + +public class UserService { + private UserRepository userRepository; + + + public UserService(UserRepository userRepository) { + if (userRepository == null) { + throw new IllegalArgumentException("UserRepository cannot be null"); + } + this.userRepository = userRepository; + } + + public boolean registerUser(String role, String firstName, String lastName, + String email, String passwordHash) { + if (role == null || role.trim().isEmpty() || + firstName == null || firstName.trim().isEmpty() || + lastName == null || lastName.trim().isEmpty() || + email == null || email.trim().isEmpty() || + passwordHash == null || passwordHash.trim().isEmpty()) { + return false; + } + User user; + if (role.equalsIgnoreCase("Customer")) { + user = new Customer(0, firstName, lastName, email, passwordHash); + } + userRepository.addUser(user); + return true; + } + + public boolean login(String email, char[] password) { + if (email == null || email.trim().isEmpty() || password == null) { + return false; + } + User user = userRepository.findByEmail(email); + if (user == null) { + return false; + } + String passwordString = new String(password); + if (user.verifyPassword(passwordString)) { + return true; + } + return false; +} +}