private ItemAndBroadcast getFilm( ProgData progData, Channel channel, DateTimeZone zone, Timestamp updatedAt) { String filmUri = PaHelper.getFilmUri(identifierFor(progData)); Maybe<Identified> possiblePreviousData = contentResolver.findByCanonicalUris(ImmutableList.of(filmUri)).getFirstValue(); Film film; if (possiblePreviousData.hasValue()) { Identified previous = possiblePreviousData.requireValue(); if (previous instanceof Film) { film = (Film) previous; } else { film = new Film(); Item.copyTo((Episode) previous, film); } } else { film = getBasicFilm(progData); } film.addAlias(PaHelper.getFilmAlias(identifierFor(progData))); Optional<String> rtFilmIdentifier = rtFilmIdentifierFor(progData); if (rtFilmIdentifier.isPresent()) { film.addAlias(PaHelper.getRtFilmAlias(rtFilmIdentifier.get())); } film.setAliasUrls(ImmutableSet.of(PaHelper.getAlias(progData.getProgId()))); Broadcast broadcast = setCommonDetails(progData, channel, zone, film, updatedAt); if (progData.getFilmYear() != null && MoreStrings.containsOnlyAsciiDigits(progData.getFilmYear())) { film.setYear(Integer.parseInt(progData.getFilmYear())); } return new ItemAndBroadcast(film, Maybe.just(broadcast)); }