package com.brahalla.PhotoAlbum.service.impl; import com.brahalla.PhotoAlbum.dao.AlbumRepository; import com.brahalla.PhotoAlbum.domain.entity.Album; import com.brahalla.PhotoAlbum.domain.factory.AlbumFactory; import com.brahalla.PhotoAlbum.domain.predicate.builder.AlbumPredicateBuilder; import com.brahalla.PhotoAlbum.model.json.request.AlbumRequest; import com.brahalla.PhotoAlbum.service.AlbumService; import com.mysema.query.types.expr.BooleanExpression; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.PageImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class AlbumServiceImpl implements AlbumService { @Autowired private AlbumFactory albumFactory; @Autowired private AlbumRepository albumRepository; @Override @Transactional public Album createAlbum(AlbumRequest albumRequest) { Album album = this.albumFactory.create(albumRequest); return this.albumRepository.save(album); } @Override public Album getAlbumById(Long id) { return this.albumRepository.findOne(id); } @Override public Iterable<Album> getAlbums(String search, Pageable pageable) { AlbumPredicateBuilder builder = new AlbumPredicateBuilder(); if (search != null) { Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),"); Matcher matcher = pattern.matcher(search + ","); while (matcher.find()) { builder.with(matcher.group(1), matcher.group(2), matcher.group(3)); } } BooleanExpression exp = builder.build(); return this.albumRepository.findAll(exp, pageable).getContent(); } @Override @Transactional public Album updateAlbum(Long id, AlbumRequest albumRequest) { Album album = this.albumRepository.findOne(id); BeanUtils.copyProperties(albumRequest, album); return this.albumRepository.save(album); } @Override @Transactional public void deleteAlbum(Long id) { this.albumRepository.delete(id); } }