public boolean setPodcastFeedAttributesWithWarnings(Podcast podcast) throws IllegalArgumentException, FeedException, IOException { boolean feedAttributesModified = false; // the syndFeed is newly created or it might have been loaded from a // local file SyndFeed syndFeed = podcast.getPodcastFeed() != null ? podcast.getPodcastFeed() : syndFeedService.getSyndFeedForUrl(podcast.getUrl()); if (syndFeed != null) { // set DESCRIPTION for podcast - used in search if (syndFeed.getDescription() != null && !syndFeed.getDescription().equals("")) { String description = syndFeed.getDescription(); // out of description remove tags if any exist and store also // short description String descWithoutTabs = description.replaceAll("\\<[^>]*>", ""); if (descWithoutTabs.length() > MAX_LENGTH_DESCRIPTION) { boolean descriptionModified = !(podcast.getDescription() != null && podcast.getDescription().equals(descWithoutTabs)); if (descriptionModified) { LOG.warn( "Podcast description has been modified " + "\n OLD " + podcast.getDescription() + "\n NEW " + descWithoutTabs); feedAttributesModified = true; } podcast.setDescription(descWithoutTabs.substring(0, MAX_LENGTH_DESCRIPTION)); } else { boolean descriptionModified = !(podcast.getDescription() != null && podcast.getDescription().equals(descWithoutTabs)); if (descriptionModified) { LOG.warn( "Podcast description has been modified " + "\n OLD " + podcast.getDescription() + "\n NEW " + descWithoutTabs); feedAttributesModified = true; } podcast.setDescription(descWithoutTabs); } } // set TITLE - used in search String podcastTitle = syndFeed.getTitle(); if (!podcast.getTitle().equals(podcastTitle)) { LOG.warn( "PodcastTitle has been modified " + "\n OLD " + podcast.getTitle() + "\n NEW " + podcastTitle); feedAttributesModified = true; } if (podcastTitle != null) { podcast.setTitle(podcastTitle); } // build the title that will appear in the URL when accessing a // podcast from the main application String titleInUrl = podcastTitle.trim().replaceAll("[^a-zA-Z0-9\\-\\s\\.]", ""); titleInUrl = titleInUrl.replaceAll("[\\-| |\\.]+", "-"); if (titleInUrl.length() > TITLE_IN_URL_MAX_LENGTH) { podcast.setTitleInUrl(titleInUrl.substring(0, TITLE_IN_URL_MAX_LENGTH)); } else { podcast.setTitleInUrl(titleInUrl); } // set author boolean authorModified = syndFeed.getAuthor() != null && (podcast.getAuthor() == null || !podcast.getAuthor().equals(syndFeed.getAuthor())); if (authorModified) { LOG.warn( "PodcastTitle has been modified " + "\n OLD " + podcast.getTitle() + "\n NEW " + podcastTitle); feedAttributesModified = true; } if (syndFeed.getAuthor() != null) { podcast.setAuthor(syndFeed.getAuthor()); } // set COPYRIGHT boolean copyrightModified = syndFeed.getCopyright() != null && (podcast.getCopyright() == null || !podcast.getCopyright().equals(syndFeed.getCopyright())); if (copyrightModified) { LOG.warn( "Copyright has been modified " + "\n OLD " + podcast.getCopyright() + "\n NEW" + syndFeed.getCopyright()); feedAttributesModified = true; } if (syndFeed.getCopyright() != null) { podcast.setCopyright(syndFeed.getCopyright()); } // set LINK boolean linkModified = syndFeed.getLink() != null && (podcast.getLink() == null || !podcast.getLink().equals(syndFeed.getLink())); if (linkModified) { LOG.warn( "Copyright has been modified " + "\n OLD " + podcast.getLink() + "\n NEW" + syndFeed.getLink()); feedAttributesModified = true; } if (syndFeed.getLink() != null) { podcast.setLink(syndFeed.getLink()); } // set url link of the podcast's image when selecting the podcast in // the main application - mostly used through <a // href="urlOfImageToDisplay".... SyndImage podcastImage = syndFeed.getImage(); String newImageUrl = null; if (null != podcastImage) { if (podcastImage.getUrl() != null) { newImageUrl = podcastImage.getUrl(); } else if (podcastImage.getLink() != null) { newImageUrl = podcastImage.getLink(); } else { newImageUrl = configBean.get("NO_IMAGE_LOCAL_URL"); } } else { newImageUrl = configBean.get("NO_IMAGE_LOCAL_URL"); } boolean imageModified = !podcast.getUrlOfImageToDisplay().equals(newImageUrl); if (imageModified) { LOG.warn( "Image has been modified " + "\n OLD " + podcast.getUrlOfImageToDisplay() + "\n NEW" + newImageUrl); feedAttributesModified = true; } podcast.setUrlOfImageToDisplay(newImageUrl); } return feedAttributesModified; }
@SuppressWarnings("unchecked") public void setPodcastFeedAttributes(Podcast podcast, boolean feedPropertyHasBeenSet) throws IllegalArgumentException, FeedException, IOException { SyndFeed syndFeed = null; if (!feedPropertyHasBeenSet) { syndFeed = syndFeedService.getSyndFeedForUrl(podcast.getUrl()); podcast.setPodcastFeed(syndFeed); } if (syndFeed != null) { // set DESCRIPTION for podcast - used in search if (syndFeed.getDescription() != null && !syndFeed.getDescription().equals("")) { String description = syndFeed.getDescription(); // out of description remove tags if any exist and store also // short description String descWithoutTabs = description.replaceAll("\\<[^>]*>", ""); if (descWithoutTabs.length() > MAX_LENGTH_DESCRIPTION) { podcast.setDescription(descWithoutTabs.substring(0, MAX_LENGTH_DESCRIPTION)); } else { podcast.setDescription(descWithoutTabs); } } // set TITLE - used in search String podcastTitle = syndFeed.getTitle(); podcast.setTitle(podcastTitle); // build the title that will appear in the URL when accessing a // podcast from the main application String titleInUrl = podcastTitle.trim().replaceAll("[^a-zA-Z0-9\\-\\s\\.]", ""); titleInUrl = titleInUrl.replaceAll("[\\-| |\\.]+", "-"); if (titleInUrl.length() > TITLE_IN_URL_MAX_LENGTH) { podcast.setTitleInUrl(titleInUrl.substring(0, TITLE_IN_URL_MAX_LENGTH)); } else { podcast.setTitleInUrl(titleInUrl); } // set author podcast.setAuthor(syndFeed.getAuthor()); // set COPYRIGHT podcast.setCopyright(syndFeed.getCopyright()); // set LINK podcast.setLink(syndFeed.getLink()); // set url link of the podcast's image when selecting the podcast in // the main application - mostly used through <a // href="urlOfImageToDisplay".... SyndImage podcastImage = syndFeed.getImage(); if (null != podcastImage) { if (podcastImage.getUrl() != null) { podcast.setUrlOfImageToDisplay(podcastImage.getUrl()); } else if (podcastImage.getLink() != null) { podcast.setUrlOfImageToDisplay(podcastImage.getLink()); } else { podcast.setUrlOfImageToDisplay(configBean.get("NO_IMAGE_LOCAL_URL")); } } else { podcast.setUrlOfImageToDisplay(configBean.get("NO_IMAGE_LOCAL_URL")); } podcast.setPublicationDate(null); // default value is null, if cannot // be set // set url media link of the last episode - this is used when // generating the ATOM and RSS feeds from the Start page for example for (SyndEntry entry : (List<SyndEntry>) syndFeed.getEntries()) { // get the list of enclosures List<SyndEnclosure> enclosures = (List<SyndEnclosure>) entry.getEnclosures(); if (null != enclosures) { // if in the enclosure list is a media type (either audio or // video), this will set as the link of the episode for (SyndEnclosure enclosure : enclosures) { if (null != enclosure) { podcast.setLastEpisodeMediaUrl(enclosure.getUrl()); break; } } } if (entry.getPublishedDate() == null) { LOG.warn( "PodURL[" + podcast.getUrl() + "] - " + "COULD NOT SET publication date for podcast, default date 08.01.1983 will be used "); } else { podcast.setPublicationDate(entry.getPublishedDate()); } // first episode in the list is last episode - normally (are // there any exceptions?? TODO -investigate) break; } } }