diff --git a/src/main/java/com/cristobalbernal/loladvisor/dao/LolDaoImplMemory.java b/src/main/java/com/cristobalbernal/loladvisor/dao/LolDaoImplMemory.java new file mode 100644 index 0000000..ccef6c0 --- /dev/null +++ b/src/main/java/com/cristobalbernal/loladvisor/dao/LolDaoImplMemory.java @@ -0,0 +1,69 @@ +package com.cristobalbernal.loladvisor.dao; + +import com.cristobalbernal.loladvisor.config.AppConfig; +import com.cristobalbernal.loladvisor.model.Lol; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; + +@Repository +public class LolDaoImplMemory implements LolDao { + + public List lol = new ArrayList<>(); + + @Autowired + private AppConfig appConfig; + + @PostConstruct + public void init() { + lol = UtilLolFileReader.readFile(appConfig.getFile(), appConfig.getSeparator(), appConfig.getListSeparator()); + } + + public Lol findById(long id) { + Optional result = lol.stream().filter(vg -> vg.getId() == id).findFirst(); + return result.orElse(null); + } + + public Collection findAll() { + return lol; + } + + public void insert(Lol videogame) { + lol.add(videogame); + } + + public void edit(Lol videogame) { + int i = getIndexOf(videogame.getId()); + if(i != -1) { + lol.set(i, videogame); + } + } + + public void delete(long id) { + int i = getIndexOf(id); + if(i != -1) { + lol.remove(i); + } + } + + private int getIndexOf(long id) { + boolean founds = false; + int i = 0; + + while(!founds && i < lol.size()) { + if(lol.get(i).getId() == id) { + founds = true; + } else { + i++; + } + } + + return (founds) ? i : -1; + } + +} diff --git a/src/main/java/com/cristobalbernal/loladvisor/dao/UtilLolFileReader.java b/src/main/java/com/cristobalbernal/loladvisor/dao/UtilLolFileReader.java new file mode 100644 index 0000000..5ce5aa6 --- /dev/null +++ b/src/main/java/com/cristobalbernal/loladvisor/dao/UtilLolFileReader.java @@ -0,0 +1,35 @@ +package com.cristobalbernal.loladvisor.dao; +import com.cristobalbernal.loladvisor.model.Lol; +import org.springframework.util.ResourceUtils; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class UtilLolFileReader { + public static List readFile(final String path, final String separator, final String listSeparator) { + List result = new ArrayList(); + + try { + // @formatter:off + result = Files + .lines(Paths.get(ResourceUtils.getFile(path).toURI())) + .skip(1) + .map(line -> { + String[] values = line.split(separator); + return new Lol(Long.parseLong(values[0]), values[1], + Arrays.asList(values[3].split(listSeparator)), values[4]); + }).collect(Collectors.toList()); + // @formatter:on + + + } catch (Exception e) { + System.err.println("Error de lectura del fichero de datos"); + System.exit(-1); + } + + return result; + } +} diff --git a/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryService.java b/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryService.java new file mode 100644 index 0000000..5185e4f --- /dev/null +++ b/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryService.java @@ -0,0 +1,11 @@ +package com.cristobalbernal.loladvisor.service; + +import com.cristobalbernal.loladvisor.model.Lol; +import java.util.Collection; + +public interface LolQueryService { + public Collection exec(); + public LolQueryService anyName(String... name); + public LolQueryService allName(String... name); + public LolQueryService titleContains(String title); +} diff --git a/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryServiceImpl.java b/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryServiceImpl.java new file mode 100644 index 0000000..523e269 --- /dev/null +++ b/src/main/java/com/cristobalbernal/loladvisor/service/LolQueryServiceImpl.java @@ -0,0 +1,57 @@ +package com.cristobalbernal.loladvisor.service; + +import com.cristobalbernal.loladvisor.dao.LolDao; +import com.cristobalbernal.loladvisor.model.Lol; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +@Service +public class LolQueryServiceImpl implements LolQueryService { + @Autowired + private LolDao dao; + + private Predicate predicate; + + @PostConstruct + public void init() { + predicate = null; + } + + @Override + public Collection exec() { + //@formatter:off + return dao.findAll() + .stream() + .filter(predicate) + .collect(Collectors.toList()); + //@formatter:on + } + + @Override + public LolQueryService anyName(String... name) { + Predicate pAnyGenre = (vg -> Arrays.stream(name).anyMatch(vg.getNombre()::contains)); + predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); + return this; + } + + @Override + public LolQueryService allName(String... name) { + Predicate pAllGenre = (vg -> Arrays.stream(name).allMatch(vg.getNombre()::contains)); + predicate = (predicate == null) ? pAllGenre : predicate.and(pAllGenre); + return this; + } + + @Override + public LolQueryService titleContains(String title) { + Predicate pTitleContains = (vg -> vg.getNombre().toLowerCase().contains(title.toLowerCase())); + predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); + return this; + } + +} diff --git a/src/main/java/com/cristobalbernal/loladvisor/service/LolService.java b/src/main/java/com/cristobalbernal/loladvisor/service/LolService.java new file mode 100644 index 0000000..108308f --- /dev/null +++ b/src/main/java/com/cristobalbernal/loladvisor/service/LolService.java @@ -0,0 +1,51 @@ +package com.cristobalbernal.loladvisor.service; +import com.cristobalbernal.loladvisor.dao.LolDao; +import com.cristobalbernal.loladvisor.model.Lol; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class LolService { + @Autowired + LolDao lolDao; + + @Autowired + LolQueryService queryService; + + public Collection findAllRol() { + List result = null; + + + result = lolDao.findAll() + .stream() + .map(vg -> vg.getRol()) + .flatMap(list -> list.stream()) + .distinct() + .sorted() + .collect(Collectors.toList()); + + // @formatter:on + + return result; + } + + public Collection findByAnyGenre(String... genres) { + return queryService.anyName(genres).exec(); + } + + public Collection findByAllGenres(String... genres) { + return queryService.allName(genres).exec(); + } + + public Collection findByTitleContains(String title) { + return queryService.titleContains(title).exec(); + } + + public Collection findAll() { + return lolDao.findAll(); + } +}