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;
      }
    }
  }