ProjectRepository.java
package taskfusion.persistency;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import taskfusion.domain.Employee;
import taskfusion.domain.Project;
import taskfusion.domain.WorktimeRegistration;
import taskfusion.exceptions.InvalidPropertyException;
import taskfusion.exceptions.NotFoundException;
import taskfusion.exceptions.OperationNotAllowedException;
/**
* Singleton instance, getInstance and resetInstance provided by ChatGPT v4
*/
public class ProjectRepository {
private Map<String, Project> projects = new HashMap<>();
/**
* SINGLETON related
*/
// Declare a private static instance of the class
private static ProjectRepository instance;
// Private constructor to prevent instantiation from other classes
private ProjectRepository() {
}
// Public method to get the Singleton instance
public static ProjectRepository getInstance() {
if (instance == null) {
instance = new ProjectRepository();
}
return instance;
}
public static void resetInstance() {
instance = null;
}
/**
* REPOSITORY related
*/
public Map<String, Project> all() {
return projects;
}
public Project create(String projectTitle, Calendar date)
throws OperationNotAllowedException, InvalidPropertyException, NotFoundException {
if (projectTitle.length() < 2) {
throw new InvalidPropertyException("En projekttitel mangler");
}
Project p = new Project(projectTitle, date);
String projectNumber = p.getProjectNumber();
this.projects.put(projectNumber, p);
return p;
}
public Project findByProjectNumber(String projectNumber) throws NotFoundException {
Project project = projects.get(projectNumber);
if (project == null) {
throw new NotFoundException("Projektet kunne ikke findes i samlingen af projekter");
}
return projects.get(projectNumber);
}
private List<WorktimeRegistration> allWorktimeRegistrations() throws NotFoundException {
List<WorktimeRegistration> list = new ArrayList<>();
for (Entry<String, Project> entry : projects.entrySet()) {
Project project = entry.getValue();
list.addAll(project.getWorktimeRegistrations());
}
return list;
}
public WorktimeRegistration findWorktimeRegistrationById(int id) throws NotFoundException {
//assert true; // Precondition
List<WorktimeRegistration> list = allWorktimeRegistrations();
for (WorktimeRegistration worktimeRegistration : list) {
if (worktimeRegistration.getId().equals(id)) {
//assert list.stream().anyMatch(x -> x.getId() == id); // Postcondition
return worktimeRegistration;
}
}
throw new NotFoundException("Ukendt tidsregistrering");
}
public Integer generateWorktimeRegistrationId() throws NotFoundException {
return allWorktimeRegistrations().size() + 1;
}
public List<Employee> getListOfEmployees(String projectNumber) {
return this.projects.get(projectNumber).getListOfAssignedEmployees();
}
}