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

Source Code of org.gudy.azureus2.ui.swt.update.SimpleInstallUI

/*
* Created on Mar 6, 2009
* Created by Paul Gardner
*
* Copyright 2009 Vuze, Inc.  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; version 2 of the License only.
*
* 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.
*/


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

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.gudy.azureus2.core3.util.AEThread2;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.update.Update;
import org.gudy.azureus2.plugins.update.UpdateCheckInstance;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderAdapter;
import org.gudy.azureus2.ui.swt.Utils;


public class
SimpleInstallUI
{
  private UpdateMonitor      monitor;
  private  UpdateCheckInstance    instance;
 
  private  boolean        cancelled;
  private ResourceDownloader    current_downloader;
 
  protected
  SimpleInstallUI(
    UpdateMonitor      _monitor,
    UpdateCheckInstance    _instance )
  {
    monitor    = _monitor;
    instance  = _instance;
   
    try{
      monitor.addDecisionHandler(_instance );
         
      Utils.execSWTThread(
        new Runnable()
        {
          public void
          run()
          {
            try{
              build();
             
            }catch( Throwable e ){
             
              Debug.out( e );
             
              instance.cancel();
            }
          }
        });
    }catch( Throwable e ){
     
      Debug.out( e );
     
      instance.cancel();
    }
  }
 
  protected void
  build()
  {
    Composite parent = (Composite)instance.getProperty( UpdateCheckInstance.PT_UI_PARENT_SWT_COMPOSITE );
   
    if ( parent != null ){
     
      if (parent.isDisposed()) {
        throw( new RuntimeException( "cancelled" ));
      }
     
      build( parent );
     
    }else{
     
      throw( new RuntimeException( "borkeroo" ));
    }
  }
 
  protected void
  build(
    Composite    parent )
  {
    parent.setLayout(new FormLayout());
       
    Button cancel_button = new Button( parent, SWT.NULL );

    cancel_button.setText( "Cancel" );
   
    cancel_button.addListener(
        SWT.Selection,
        new Listener()
        {
          public void
          handleEvent(
            Event arg0 )
          {
            synchronized( SimpleInstallUI.this ){
           
              cancelled = true;

              if ( current_downloader != null ){
               
                current_downloader.cancel();
              }
            }
           
            instance.cancel();
          }
        });
     
    FormData  data = new FormData();
    data.right   = new FormAttachment(100,0);
    data.top  = new FormAttachment(0,0);
    data.bottom  = new FormAttachment(100,0);

    cancel_button.setLayoutData( data );
     
    final Label label = new Label(parent, SWT.NULL );
   
    label.setText( "blah blah " );
   
    data = new FormData();
    data.left   = new FormAttachment(0,0);
    data.top  = new FormAttachment(cancel_button,0, SWT.CENTER);

    label.setLayoutData( data );

    final ProgressBar progress = new ProgressBar(parent, SWT.NULL );
   
    progress.setMinimum( 0 );
    progress.setMaximum( 100 );
    progress.setSelection( 0 );
   
   
    data = new FormData();
    data.left   = new FormAttachment(label,4);
    data.top  = new FormAttachment(cancel_button, 0, SWT.CENTER);
    data.right  = new FormAttachment(cancel_button,-4);

    progress.setLayoutData( data );
   
    parent.layout( true, true );
   
    new AEThread2( "SimpleInstallerUI", true )
    {
      public void
      run()
      {
        try{
          Update[] updates = instance.getUpdates();

          for ( Update update: updates ){
           
            String  name = update.getName();
           
            int  pos = name.indexOf('/');
           
            if ( pos >= 0 ){
             
              name = name.substring( pos+1 );
            }
           
            setLabel( name );

            ResourceDownloader[] downloaders = update.getDownloaders();
           
            for ( ResourceDownloader downloader: downloaders ){
             
              synchronized( SimpleInstallUI.this ){
               
                if ( cancelled ){
                 
                  return;
                }
               
                current_downloader = downloader;
              }
             
              setProgress( 0 );
             
              downloader.addListener(
                new ResourceDownloaderAdapter()
                {
                  public void
                  reportPercentComplete(
                    ResourceDownloader  downloader,
                    int          percentage )
                  {
                    setProgress( percentage );
                  }
                 
                  public void
                  reportAmountComplete(
                    ResourceDownloader  downloader,
                    long        amount )
                  {
                   
                  }
                });
             
              downloader.download();
            }
          }
         
          boolean  restart_required = false;
         
          for (int i=0;i<updates.length;i++){
   
            if ( updates[i].getRestartRequired() == Update.RESTART_REQUIRED_YES ){
             
              restart_required = true;
            }
          }
         
          if ( restart_required ){
           
            monitor.handleRestart();
          }
        }catch( Throwable e ){
         
          Debug.out( "Install failed", e );
         
          instance.cancel();
        }
      }
     
      protected void
      setLabel(
        final String    str )
      {
        Utils.execSWTThread(
          new Runnable()
          {
            public void
            run()
            {
              if (label != null && !label.isDisposed()) {
                label.setText( str );
                label.getParent().layout();
              }
            }
          });
      }
     
      protected void
      setProgress(
        final int    percent )
      {
        Utils.execSWTThread(
          new Runnable()
          {
            public void
            run()
            {
              if (progress != null && !progress.isDisposed()) {
                progress.setSelection( percent );
              }
            }
          });
      }
    }.start();
  }
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.update.SimpleInstallUI

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.