content: package allen.town.podcast.model.feed;
  
  import android.text.TextUtils;
  
  import java.io.File;
  
  /**
   * Represents a component of a Feed that has to be downloaded
   */
  public abstract class FeedFile extends FeedComponent {
  
      String file_url;
      protected String download_url;
      boolean downloaded;
  
      /**
       * Creates a new FeedFile object.
       *
       * @param file_url     The location of the FeedFile. If this is null, the downloaded-attribute
       *                     will automatically be set to false.
       * @param download_url The location where the FeedFile can be downloaded.
       * @param downloaded   true if the FeedFile has been downloaded, false otherwise. This parameter
       *                     will automatically be interpreted as false if the file_url is null.
       */
      public FeedFile(String file_url, String download_url, boolean downloaded) {
          super();
          this.file_url = file_url;
          this.download_url = download_url;
          this.downloaded = (file_url != null) && downloaded;
      }
  
      public FeedFile() {
          this(null, null, false);
      }
  
      public abstract int getTypeAsInt();
  
      /**
       * Update this FeedFile's attributes with the attributes from another
       * FeedFile. This method should only update attributes which where read from
       * the feed.
       */
      void updateFromOther(FeedFile other) {
          super.updateFromOther(other);
          this.download_url = other.download_url;
      }
  
      /**
       * Compare's this FeedFile's attribute values with another FeedFile's
       * attribute values. This method will only compare attributes which were
       * read from the feed.
       *
       * @return true if attribute values are different, false otherwise
       */
      boolean compareWithOther(FeedFile other) {
          if (super.compareWithOther(other)) {
              return true;
          }
          if (!TextUtils.equals(download_url, other.download_url)) {
              return true;
          }
          return false;
      }
  
      /**
       * Returns true if the file exists at file_url.
       */
      public boolean fileExists() {
          if (file_url == null) {
              return false;
          } else {
              File f = new File(file_url);
              return f.exists();
          }
      }
  
      public String getFile_url() {
          return file_url;
      }
  
      /**
       * Changes the file_url of this FeedFile. Setting this value to
       * null will also set the downloaded-attribute to false.
       */
      public void setFile_url(String file_url) {
          this.file_url = file_url;
          if (file_url == null) {
              downloaded = false;
          }
      }
  
      public String getDownload_url() {
          return download_url;
      }
  
      public void setDownload_url(String download_url) {
          this.download_url = download_url;
      }
  
      public boolean isDownloaded() {
          return downloaded;
      }
  
      public void setDownloaded(boolean downloaded) {
          this.downloaded = downloaded;
      }
  }
  