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)); }
private Item getBasicFilmWithoutBroadcast(ProgData progData) { ImmutableList.Builder<String> uris = ImmutableList.builder(); Optional<String> rtFilmIdentifier = rtFilmIdentifierFor(progData); // Previously when constructing the uri we would failover to ProgId if the rtFilmIdentifier // was missing but still write to the same namespace. To avoid creating duplicates we have // to replicate this old behavior and use the rtFilmIdentifier for resolution when its // available String legacyFilmUri = rtFilmIdentifier.isPresent() ? PaHelper.getLegacyFilmUri(rtFilmIdentifier.get()) : PaHelper.getLegacyFilmUri(progData.getProgId()); uris.add(legacyFilmUri); uris.add(PaHelper.getAlias(progData.getProgId())); uris.add(PaHelper.getFilmUri(identifierFor(progData))); Map<String, Identified> resolvedContent = contentResolver.findByUris(uris.build()).asResolvedMap(); Film film = getFilmFromResolvedContent(progData, resolvedContent, legacyFilmUri); if (progData.getFilmYear() != null && MoreStrings.containsOnlyAsciiDigits(progData.getFilmYear())) { film.setYear(Integer.parseInt(progData.getFilmYear())); } return film; }