@ -0,0 +1,19 @@ | |||||
package com.antoniofrische.perifericoadvisor.service; | |||||
import java.util.Collection; | |||||
import com.antoniofrische.perifericosAdvisor.model.Periferico; | |||||
public interface PerifericoQueryService { | |||||
public Collection<Periferico> exec(); | |||||
public PerifericoQueryService anyTipo(String... tipo); | |||||
public PerifericoQueryService allTipo(String... tipo); | |||||
public PerifericoQueryService color(String color); | |||||
public PerifericoQueryService titleContains(String nombre); | |||||
} |
@ -0,0 +1,62 @@ | |||||
package com.antoniofrische.perifericoadvisor.service; | |||||
import java.util.Arrays; | |||||
import java.util.Collection; | |||||
import java.util.function.Predicate; | |||||
import java.util.stream.Collectors; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import com.antoniofrische.perifericosAdvisor.dao.PerifericoDao; | |||||
import com.antoniofrische.perifericosAdvisor.model.Periferico; | |||||
@Service | |||||
public class PerifericoQueryServiceImpl implements PerifericoQueryService{ | |||||
@Autowired | |||||
PerifericoDao dao; | |||||
private Predicate<Periferico> predicate; | |||||
public void init() { | |||||
predicate = null; | |||||
} | |||||
public Collection<Periferico> exec() { | |||||
// @formatter:off | |||||
return dao.findAll() | |||||
.stream() | |||||
.filter(predicate) | |||||
.collect(Collectors.toList()); | |||||
// @formatter:on | |||||
} | |||||
public PerifericoQueryServiceImpl anyTipo(String... tipo) { | |||||
Predicate<Periferico> pAnyTipo = (periferico -> Arrays.stream(tipo).anyMatch(periferico.getTipo()::contains)); | |||||
predicate = (predicate == null) ? pAnyTipo : predicate.and(pAnyTipo); | |||||
return this; | |||||
} | |||||
public PerifericoQueryServiceImpl allTipo(String... genres) { | |||||
Predicate<Periferico> pAllGenres = (periferico -> Arrays.stream(genres).allMatch(periferico.getTipo()::contains)); | |||||
predicate = (predicate == null) ? pAllGenres : predicate.and(pAllGenres); | |||||
return this; | |||||
} | |||||
public PerifericoQueryServiceImpl color(String color) { | |||||
Predicate<Periferico> pYear = (periferico -> periferico.getColor().equalsIgnoreCase(color)); | |||||
predicate = (predicate == null) ? pYear : predicate.and(pYear); | |||||
return this; | |||||
} | |||||
public PerifericoQueryServiceImpl titleContains(String nombre) { | |||||
Predicate<Periferico> pTitleContains = (periferico -> periferico.getNombre().toLowerCase().contains(nombre.toLowerCase())); | |||||
predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); | |||||
return this; | |||||
} | |||||
} |
@ -0,0 +1,60 @@ | |||||
package com.antoniofrische.perifericoadvisor.service; | |||||
import java.util.Collection; | |||||
import java.util.List; | |||||
import java.util.stream.Collectors; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
import com.antoniofrische.perifericosAdvisor.dao.PerifericoDao; | |||||
import com.antoniofrische.perifericosAdvisor.model.Periferico; | |||||
@Service | |||||
public class PerifericoService { | |||||
@Autowired | |||||
PerifericoDao perifericoDao; | |||||
@Autowired | |||||
PerifericoQueryService queryService; | |||||
public Collection<String> findAllTipo() { | |||||
List<String> result = null; | |||||
// @formatter:off | |||||
result = (List<String>) perifericoDao.findAll() | |||||
.stream() | |||||
.map(p -> p.getTipo()) | |||||
.flatMap(lista -> lista.stream() | |||||
.distinct() | |||||
.sorted() | |||||
.collect(Collectors.toList())); | |||||
// @formatter:on | |||||
return result; | |||||
} | |||||
public Collection<Periferico> findByAnyGenre(String... tipo) { | |||||
return queryService.anyTipo(tipo).exec(); | |||||
} | |||||
public Collection<Periferico> findByAllGenres(String... tipo) { | |||||
return queryService.allTipo(tipo).exec(); | |||||
} | |||||
public Collection<Periferico> findByColor(String color) { | |||||
return queryService.color(color).exec(); | |||||
} | |||||
public Collection<Periferico> findByTitleContains(String nombre) { | |||||
return queryService.titleContains(nombre).exec(); | |||||
} | |||||
public Collection<Periferico> findAll() { | |||||
return perifericoDao.findAll(); | |||||
} | |||||
} |