package com.encora; // Uncomment this for using a database instead. //public interface ToDosRepository extends JpaRepository{ //} import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.FluentQuery; import java.util.*; import java.util.function.Function; public class ToDosRepository implements JpaRepository { Integer lastId; List todos; String currentSorting; List filteredToDos; List currentFilters; // Constructor public ToDosRepository() { this.lastId = 0; this.todos = new ArrayList<>(); this.currentSorting = "id"; this.filteredToDos = new ArrayList<>(); this.currentFilters = List.of("", "All", "All"); } // Return all to dos. @Override public List findAll() { return this.todos; } // Return all to dos and sorted. @Override public List findAll(Sort sort) { List sortedList = new ArrayList<>(this.todos); try { Comparator comparator = this.getToDoComparator(sort); Collections.sort(sortedList, comparator); } catch (Exception e) { throw new RuntimeException(e); } return sortedList; } // Save new element. @Override public S save(S entity) { if (entity.getId() != null) { // If the entity has an ID, search for it in our list of to dos and // replace it. ToDos selectedToDo; for (int index = 0; index < this.todos.size(); index++) { selectedToDo = this.todos.get(index); if (Objects.equals(selectedToDo.getId(), entity.getId())) { this.todos.set(index, entity); return null; } } } else { // If entity doesn't have an ID, assign it a new one. entity.setId(++this.lastId); } // If the ID couldn't be found or the entity didn't exist, append the // entity to our list. this.todos.add(entity); return null; } // Retrieve a to do. @Override public ToDos getById(Integer integer) { ToDos selectedToDo; for (int index = 0; index < this.todos.size(); index++) { selectedToDo = this.todos.get(index); if (Objects.equals(selectedToDo.getId(), integer)) { return selectedToDo; } } return null; } private Comparator getToDoComparator(Sort sort) throws Exception { // Personal function. Creates a `Comparator` based on the `sort` // parameter. This is for us to successfully sort our List without the // need of a database. String sortString = sort.toString(); // <- '{field}: {order}' String[] sortCriteria = sortString.split(": "); String field = sortCriteria[0]; String order = sortCriteria[1]; Comparator comparator = null; switch (field) { case "Id": comparator = Comparator.comparing(ToDos::getId); break; case "Priority": comparator = Comparator.comparing(ToDos::getPriority); break; case "DueDate": comparator = Comparator.comparing(ToDos::getDueDate); break; default: throw new Exception("Field sorting not implemented."); } if (order.equalsIgnoreCase("desc")) { comparator = comparator.reversed(); } return comparator; } /* * N O T Y E T D E F I N E D . */ @Override public void flush() { } @Override public S saveAndFlush(S entity) { return null; } @Override public List saveAllAndFlush(Iterable entities) { return null; } @Override public void deleteAllInBatch(Iterable entities) { } @Override public void deleteAllByIdInBatch(Iterable integers) { } @Override public void deleteAllInBatch() { } @Override public ToDos getOne(Integer integer) { return null; } @Override public ToDos getReferenceById(Integer integer) { return null; } @Override public Optional findOne(Example example) { return Optional.empty(); } @Override public List findAll(Example example) { return null; } @Override public List findAll(Example example, Sort sort) { return null; } @Override public Page findAll(Example example, Pageable pageable) { return null; } @Override public long count(Example example) { return 0; } @Override public boolean exists(Example example) { return false; } @Override public R findBy(Example example, Function, R> queryFunction) { return null; } @Override public List saveAll(Iterable entities) { return null; } @Override public Optional findById(Integer integer) { return Optional.empty(); } @Override public boolean existsById(Integer integer) { return false; } @Override public List findAllById(Iterable integers) { return null; } @Override public long count() { return 0; } @Override public void deleteById(Integer integer) { } @Override public void delete(ToDos entity) { } @Override public void deleteAllById(Iterable integers) { } @Override public void deleteAll(Iterable entities) { } @Override public void deleteAll() { } @Override public Page findAll(Pageable pageable) { return null; } }