Package org.gudy.azureus2.ui.swt.update

Source Code of org.gudy.azureus2.ui.swt.update.UpdateAutoDownloader$cbCompletion

/**
* Copyright (C) 2007 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* AELITIS, SAS au capital de 63.529,40 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/

package org.gudy.azureus2.ui.swt.update;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;

import org.gudy.azureus2.core3.util.AEThread;

import org.gudy.azureus2.plugins.update.Update;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderException;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener;

/**
* @author TuxPaper
* @created Feb 25, 2007
*
*/
public class UpdateAutoDownloader
  implements ResourceDownloaderListener
{
  private final Update[] updates;

  private ArrayList downloaders;

  private Iterator iterDownloaders;

  private final cbCompletion completionCallback;

  public static interface cbCompletion
  {
    public void allUpdatesComplete(boolean requiresRestart, boolean bHadMandatoryUpdates);
  }

  /**
   * @param us
   */
  public UpdateAutoDownloader(Update[] updates, cbCompletion completionCallback) {
    this.updates = updates;
    this.completionCallback = completionCallback;
    downloaders = new ArrayList();

    start();
  }

  private void start() {
    for (int i = 0; i < updates.length; i++) {
      Update update = updates[i];
      ResourceDownloader[] rds = update.getDownloaders();
      for (int j = 0; j < rds.length; j++) {
        ResourceDownloader rd = rds[j];
        downloaders.add(rd);
      }
    }

    iterDownloaders = downloaders.iterator();
    nextUpdate();
  }

  /**
   *
   *
   * @since 3.0.0.7
   */
  private boolean nextUpdate() {
    if (iterDownloaders.hasNext()) {
      ResourceDownloader downloader = (ResourceDownloader) iterDownloaders.next();
      downloader.addListener(this);
      downloader.asyncDownload();
      return true;
    }
    return false;
  }

  /**
   *
   *
   * @since 3.0.0.7
   */
  private void allDownloadsComplete() {
    boolean bRequiresRestart = false;
    boolean bHadMandatoryUpdates = false;
   
    for (int i = 0; i < updates.length; i++) {
      Update update = updates[i];
        // updates with no downloaders exist for admin purposes only
      if ( update.getDownloaders().length > 0){
        if (update.getRestartRequired() != Update.RESTART_REQUIRED_NO) {
          bRequiresRestart = true;
        }
        if ( update.isMandatory()){
          bHadMandatoryUpdates = true;
        }
      }
    }

    completionCallback.allUpdatesComplete(bRequiresRestart,bHadMandatoryUpdates);
  }

  // @see org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener#completed(org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader, java.io.InputStream)
  public boolean completed(ResourceDownloader downloader, InputStream data) {
    downloader.removeListener(this);
    if (!nextUpdate()) {
      // fire in another thread so completed function can exit
      AEThread thread = new AEThread("AllDownloadsComplete", true) {
        public void runSupport() {
          allDownloadsComplete();
        }
      };
      thread.start();
    }
    return true;
  }

  // @see org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener#failed(org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader, org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderException)
  public void failed(ResourceDownloader downloader,
      ResourceDownloaderException e) {
    downloader.removeListener(this);
    iterDownloaders.remove();
    nextUpdate();
  }

  // @see org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener#reportActivity(org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader, java.lang.String)
  public void reportActivity(ResourceDownloader downloader, String activity) {
  }

  // @see org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener#reportAmountComplete(org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader, long)
  public void reportAmountComplete(ResourceDownloader downloader, long amount) {
  }

  // @see org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener#reportPercentComplete(org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader, int)
  public void reportPercentComplete(ResourceDownloader downloader,
      int percentage) {
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.update.UpdateAutoDownloader$cbCompletion

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.