@ -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> 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<Lol> result = lol.stream().filter(vg -> vg.getId() == id).findFirst(); | |||||
return result.orElse(null); | |||||
} | |||||
public Collection<Lol> 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; | |||||
} | |||||
} |
@ -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<Lol> readFile(final String path, final String separator, final String listSeparator) { | |||||
List<Lol> result = new ArrayList<Lol>(); | |||||
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; | |||||
} | |||||
} |
@ -0,0 +1,11 @@ | |||||
package com.cristobalbernal.loladvisor.service; | |||||
import com.cristobalbernal.loladvisor.model.Lol; | |||||
import java.util.Collection; | |||||
public interface LolQueryService { | |||||
public Collection<Lol> exec(); | |||||
public LolQueryService anyName(String... name); | |||||
public LolQueryService allName(String... name); | |||||
public LolQueryService titleContains(String title); | |||||
} |
@ -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<Lol> predicate; | |||||
@PostConstruct | |||||
public void init() { | |||||
predicate = null; | |||||
} | |||||
@Override | |||||
public Collection<Lol> exec() { | |||||
//@formatter:off | |||||
return dao.findAll() | |||||
.stream() | |||||
.filter(predicate) | |||||
.collect(Collectors.toList()); | |||||
//@formatter:on | |||||
} | |||||
@Override | |||||
public LolQueryService anyName(String... name) { | |||||
Predicate<Lol> 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<Lol> 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<Lol> pTitleContains = (vg -> vg.getNombre().toLowerCase().contains(title.toLowerCase())); | |||||
predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); | |||||
return this; | |||||
} | |||||
} |
@ -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<String> findAllRol() { | |||||
List<String> 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<Lol> findByAnyGenre(String... genres) { | |||||
return queryService.anyName(genres).exec(); | |||||
} | |||||
public Collection<Lol> findByAllGenres(String... genres) { | |||||
return queryService.allName(genres).exec(); | |||||
} | |||||
public Collection<Lol> findByTitleContains(String title) { | |||||
return queryService.titleContains(title).exec(); | |||||
} | |||||
public Collection<Lol> findAll() { | |||||
return lolDao.findAll(); | |||||
} | |||||
} |