package javaconfigftw.data.mongodb;
import javaconfigftw.CloudFoundryDataSourceConfiguration;
import javaconfigftw.Customer;
import javaconfigftw.LocalDataSourceConfiguration;
import org.apache.commons.io.IOUtils;
import org.springframework.context.annotation.*;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
public class Main {
private final static Random random = new Random();
public static void main(String[] args) throws Throwable {
AnnotationConfigApplicationContext annotationConfigApplicationContext1
= new AnnotationConfigApplicationContext(MongoRepositoryConfiguration.class);
annotationConfigApplicationContext1.registerShutdownHook();
AnnotationConfigApplicationContext annotationConfigApplicationContext = annotationConfigApplicationContext1;
CustomerRepository customerRepository = annotationConfigApplicationContext.getBean(CustomerRepository.class);
Customer[] customers = new Customer[]{
(new Customer("Phill", "Webb")),
(new Customer("Mark", "Pollack")),
(new Customer("Mark", "Fisher")),
(new Customer("Oliver", "Gierke")),
(new Customer("Dave", "Syer")),
(new Customer("Chris", "Beams")),
(new Customer("Josh", "Long"))
};
customerRepository.deleteAll();
for (Customer customer : customers)
customerRepository.save(customer);
Iterable<Customer> customerList = customerRepository.findAll();
List<Customer> allCustomersFromDatabase = new ArrayList<Customer>();
for (Customer customer : customerList)
allCustomersFromDatabase.add(customer);
Customer randomCustomer = customers[random.nextInt(allCustomersFromDatabase.size())];
Resource resource = new ClassPathResource("/sample/photo.jpg");
InputStream inputStream = resource.getInputStream();
customerRepository.storeProfilePhoto( (randomCustomer.getId()), inputStream);
InputStream readInputStream = customerRepository.readProfilePhoto( ( randomCustomer.getId()));
System.out.println(
"Do the bytes stored in MongoDB match" +
" the byte[]s for the image we stored in Mongo? " +
Arrays.equals(IOUtils.toByteArray(readInputStream), (IOUtils.toByteArray(resource.getInputStream()))));
}
@Configuration
@Import({LocalDataSourceConfiguration.class, CloudFoundryDataSourceConfiguration.class})
@EnableMongoRepositories
@ComponentScan
public static class MongoRepositoryConfiguration {
@Bean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory) {
return new MongoTemplate(mongoDbFactory);
}
@Bean
public GridFsTemplate gridFsTemplate(MongoDbFactory mongoDbFactory, MongoTemplate mongoTemplate) throws Exception {
return new GridFsTemplate(mongoDbFactory, mongoTemplate.getConverter());
}
}
}