@ -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(); | |||
} | |||
} |