package javaconfigftw.data.mongodb;
import com.mongodb.gridfs.GridFSDBFile;
import javaconfigftw.Customer;
import org.apache.commons.io.IOUtils;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import javax.inject.Inject;
import java.io.InputStream;
import java.math.BigInteger;
public class CustomerRepositoryImpl implements MongoCustomerRepository {
private GridFsTemplate gridFsTemplate;
private CustomerRepository customerRepository;
@Inject
public void setGridFsTemplate(GridFsTemplate gridFsTemplate) {
this.gridFsTemplate = gridFsTemplate;
}
@Inject
public void setCustomerRepository(CustomerRepository customerRepository) {
this.customerRepository = customerRepository;
}
@Override
public InputStream readProfilePhoto( BigInteger customerId) {
Customer customer = customerRepository.findOne((customerId));
GridFSDBFile gridFSDBFile = this.gridFsTemplate.findOne(queryForManagedUpload(customer));
return gridFSDBFile.getInputStream();
}
@Override
public void storeProfilePhoto(BigInteger customerId, InputStream bytes) {
Customer customer = customerRepository.findOne((customerId));
try {
this.gridFsTemplate.store(bytes, fileNameForManagedUpload(customer));
} finally {
IOUtils.closeQuietly(bytes);
}
}
private String fileNameForManagedUpload(Customer c) {
return c.getId().toString();
}
private Query queryForManagedUpload(Customer c) {
String fileName = fileNameForManagedUpload(c);
return (new Query().addCriteria(Criteria.where("filename").is(fileName)));
}
}