package org.sculptor.examples.library.media.repositoryimpl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.sculptor.examples.library.media.domain.MediaRepository; import org.sculptor.examples.library.media.domain.MovieProperties; import org.sculptor.examples.library.media.repositoryimpl.MediaRepositoryBase; import org.sculptor.examples.library.media.domain.Media; import org.sculptor.examples.library.media.domain.MediaCharacter; import org.sculptor.examples.library.media.domain.Movie; import org.sculptor.framework.accessapi.FindByKeysAccess2; import org.springframework.stereotype.Repository; /** * Repository for Media */ @Repository("mediaRepository") public class MediaRepositoryImpl extends MediaRepositoryBase implements MediaRepository { public MediaRepositoryImpl() { } @Override public Map<String, Movie> findMovieByUrlIMDB(Set<String> keys) { Map<Object, Movie> media = findMovieByKeys(keys, MovieProperties.urlIMDB().toString(), Movie.class); Map<String, Movie> movies = new HashMap<String, Movie>(); for (Object k : media.keySet()) { movies.put((String) k, (Movie) media.get(k)); } return movies; } /** * Delegates to {@link org.sculptor.framework.accessapi.FindByKeysAccess} */ @SuppressWarnings("rawtypes") protected Map<Object, Movie> findMovieByKeys(Set<String> keys, String keyPropertyName, Class persistentClass) { FindByKeysAccess2<Movie> ao = createFindByKeysAccess(Movie.class, Movie.class); ao.setKeys(keys); ao.setKeyPropertyName(keyPropertyName); ao.execute(); return ao.getResult(); } @Override public List<Media> findMediaByCharacter(Long libraryId, String characterName) { // Retrieve the MediaCharacter objects via another Repository Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("characterName", characterName); List<MediaCharacter> foundCharacters = getMediaCharacterRepository().findByQuery("MediaCharacter.findByCharacterName", parameters); // filter matching Media for the found characters and the specified // library List<Media> matchingMedia = new ArrayList<Media>(); for (MediaCharacter c : foundCharacters) { for (Media m : c.getExistsInMedia()) { if (m.existsInLibrary(libraryId)) { matchingMedia.add(m); } } } return matchingMedia; } }