package org.springframework.social.importer; import org.apache.log4j.Logger; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.NonTransientResourceException; import org.springframework.batch.item.ParseException; import org.springframework.batch.item.UnexpectedInputException; import org.springframework.beans.factory.InitializingBean; import org.springframework.social.flickr.api.Person; import org.springframework.social.flickr.api.Photoset; import org.springframework.social.flickr.api.PhotosetOperations; import org.springframework.social.flickr.api.Photosets; import org.springframework.social.flickr.api.impl.FlickrTemplate; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; public class FlickrServicePhotoAlbumItemReader implements ItemReader<PhotoSet>, InitializingBean { private Logger logger = Logger.getLogger(getClass()); private FlickrTemplate flickrTemplate; private Person person; private Queue<Photoset> photoSets = new ConcurrentLinkedQueue<Photoset>(); private PhotosetOperations photosetOperations; private String userId; public FlickrServicePhotoAlbumItemReader(FlickrTemplate flickrTemplate) { this.flickrTemplate = flickrTemplate; this.photosetOperations = this.flickrTemplate.photosetOperations(); this.person = this.flickrTemplate.peopleOperations().getPersonProfile(); this.userId = person.getId(); } @Override public PhotoSet read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException { Photoset og = photoSets.isEmpty() ? null : photoSets.remove(); if (null == og) return null; return new PhotoSet(this.photosetOperations.getInfo(og.getId()), userId); } public void setFlickrTemplate(FlickrTemplate flickrTemplate) { this.flickrTemplate = flickrTemplate; this.photosetOperations = flickrTemplate.photosetOperations(); } @Override public void afterPropertiesSet() throws Exception { Photosets photosets = photosetOperations.getList(userId, null, null); for (Photoset ps : photosets.getPhotoset()) this.photoSets.add(ps); } }