@ -0,0 +1,56 @@ | |||||
package com.jesuspinar.booksearch.service; | |||||
import com.jesuspinar.booksearch.dao.BookDao; | |||||
import com.jesuspinar.booksearch.model.Book; | |||||
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 BookQueryService implements IBookQueryService{ | |||||
@Autowired | |||||
BookDao dao; | |||||
private Predicate<Book> predicate; | |||||
@PostConstruct | |||||
public void init() { | |||||
predicate = null; | |||||
} | |||||
@Override | |||||
public Collection<Book> exec() { | |||||
return dao.findAll() | |||||
.stream() | |||||
.filter(predicate) | |||||
.collect(Collectors.toList()); | |||||
} | |||||
@Override | |||||
public IBookQueryService anyGenre(String... genre) { | |||||
Predicate<Book> pAnyGenre = (book -> Arrays.stream(genre).anyMatch(book.getGenre()::contains)); | |||||
predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); | |||||
return this; | |||||
} | |||||
@Override | |||||
public IBookQueryService allGenres(String... genres) { | |||||
Predicate<Book> pAnyGenre = (book -> Arrays.stream(genres).allMatch(book.getGenre()::contains)); | |||||
predicate = (predicate == null) ? pAnyGenre : predicate.and(pAnyGenre); | |||||
return this; | |||||
} | |||||
@Override | |||||
public IBookQueryService anyTitle(String title) { | |||||
Predicate<Book> pTitleContains = (book -> book.getTitle().toLowerCase().contains(title.toLowerCase())); | |||||
predicate = (predicate == null) ? pTitleContains : predicate.and(pTitleContains); | |||||
return this; | |||||
} | |||||
} |
@ -0,0 +1,57 @@ | |||||
package com.jesuspinar.booksearch.service; | |||||
import com.jesuspinar.booksearch.dao.BookDao; | |||||
import com.jesuspinar.booksearch.model.Book; | |||||
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 BookService implements IBookService{ | |||||
@Autowired | |||||
BookDao bookDao; | |||||
@Autowired | |||||
IBookQueryService queryService; | |||||
@Override | |||||
public Collection<String> findAllGenres() { | |||||
List<String> result = null; | |||||
result = bookDao.findAll() | |||||
.stream() | |||||
.map(book -> book.getGenre()) | |||||
//.flatMap(l -> Stream.of(l))//TODO: Check this if other java version! | |||||
.distinct() | |||||
.sorted() | |||||
.collect(Collectors.toList()); | |||||
return result; | |||||
} | |||||
@Override | |||||
public Collection<Book> findByAnyGenre(String... genres) { | |||||
return queryService.anyGenre(genres).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Book> findByAllGenres(String... genres) { | |||||
return queryService.allGenres(genres).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Book> findByTitleContains(String title) { | |||||
return queryService.anyTitle(title).exec(); | |||||
} | |||||
@Override | |||||
public Collection<Book> findAll() { | |||||
return bookDao.findAll(); | |||||
} | |||||
} |
@ -0,0 +1,15 @@ | |||||
package com.jesuspinar.booksearch.service; | |||||
import com.jesuspinar.booksearch.model.Book; | |||||
import java.util.Collection; | |||||
public interface IBookQueryService { | |||||
public Collection<Book> exec(); | |||||
public IBookQueryService anyGenre(String... genre); | |||||
public IBookQueryService allGenres(String... genres); | |||||
//public IBookQueryService anyAuthor(String... author); | |||||
//public IBookQueryService allAuthors(String... genres); | |||||
public IBookQueryService anyTitle(String title); | |||||
} |
@ -0,0 +1,13 @@ | |||||
package com.jesuspinar.booksearch.service; | |||||
import com.jesuspinar.booksearch.model.Book; | |||||
import java.util.Collection; | |||||
public interface IBookService { | |||||
public Collection<String> findAllGenres(); | |||||
public Collection<Book> findByAnyGenre(String... genres); | |||||
public Collection<Book> findByAllGenres(String... genres); | |||||
public Collection<Book> findByTitleContains(String title); | |||||
public Collection<Book> findAll(); | |||||
} |