Package org.gudy.azureus2.ui.swt.views

Source Code of org.gudy.azureus2.ui.swt.views.PeerSuperView

/*
* Created on 2 juil. 2003
*
* Copyright (C) 2004, 2005, 2006 Aelitis SAS, 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.
*
* 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 ( see the LICENSE file ).
*
* 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 46,603.30 euros,
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*/
package org.gudy.azureus2.ui.swt.views;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;

import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerPeerListener;
import org.gudy.azureus2.core3.global.GlobalManager;
import org.gudy.azureus2.core3.global.GlobalManagerListener;
import org.gudy.azureus2.core3.peer.PEPeer;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.plugins.peers.Peer;
import org.gudy.azureus2.plugins.ui.tables.TableManager;
import org.gudy.azureus2.ui.swt.views.peer.PeerInfoView;
import org.gudy.azureus2.ui.swt.views.peer.RemotePieceDistributionView;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWT;
import org.gudy.azureus2.ui.swt.views.table.TableViewSWTMenuFillListener;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewSWTImpl;
import org.gudy.azureus2.ui.swt.views.table.impl.TableViewTab;
import org.gudy.azureus2.ui.swt.views.tableitems.peers.DownloadNameItem;

import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreFactory;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.ui.common.table.TableColumnCore;
import com.aelitis.azureus.ui.common.table.TableLifeCycleListener;

/**
* @author Olivier
* @author TuxPaper
*         2004/Apr/20: Use TableRowImpl instead of PeerRow
*         2004/Apr/20: Remove need for tableItemToObject
*         2004/Apr/21: extends TableView instead of IAbstractView
* @author MjrTom
*      2005/Oct/08: Add PieceItem
*/

public class PeerSuperView
  extends TableViewTab<PEPeer>
  implements GlobalManagerListener, DownloadManagerPeerListener,
  TableLifeCycleListener, TableViewSWTMenuFillListener
  private TableViewSWT<PEPeer> tv;
  private Shell shell;
  private boolean active_listener = true;


  /**
   * Initialize
   *
   */
  public PeerSuperView() {
    super("AllPeersView");

    TableColumnCore[] items = PeersView.getBasicColumnItems(TableManager.TABLE_ALL_PEERS);
    TableColumnCore[] basicItems = new TableColumnCore[items.length + 1];
    System.arraycopy(items, 0, basicItems, 0, items.length);
    basicItems[items.length] = new DownloadNameItem(TableManager.TABLE_ALL_PEERS);

    tv = new TableViewSWTImpl<PEPeer>(Peer.class, TableManager.TABLE_ALL_PEERS,
        getPropertiesPrefix(), basicItems, "connected_time", SWT.MULTI
            | SWT.FULL_SELECTION | SWT.VIRTUAL);
    tv.setRowDefaultHeight(16);
    tv.setEnableTabViews(true);
    tv.setCoreTabViews(new IView[] {
      new PeerInfoView(),
      new RemotePieceDistributionView(),
      new LoggerView(true)
    });
    tv.addLifeCycleListener(this);
    tv.addMenuFillListener(this);
   
 

  public TableViewSWT<PEPeer> initYourTableView() {
    return tv;
  }

  // @see com.aelitis.azureus.ui.common.table.TableLifeCycleListener#tableViewInitialized()
  public void tableViewInitialized() {
    shell = tv.getComposite().getShell();
    AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
   
      public void azureusCoreRunning(AzureusCore core) {
        registerGlobalManagerListener(core);
      }
    });
  }
   
  public void tableViewDestroyed() {
    unregisterListeners();
  }

  public void fillMenu(String sColumnName, final Menu menu) {
    PeersView.fillMenu(menu, tv, shell, false);
  }


  /* DownloadManagerPeerListener implementation */
  public void peerAdded(PEPeer created) {
    tv.addDataSource(created);
  }

  public void peerRemoved(PEPeer removed) {
    tv.removeDataSource(removed);
  }

  /**
   * Add datasources already in existance before we called addListener.
   * Faster than allowing addListener to call us one datasource at a time.
   * @param core
   */
  private void addExistingDatasources(AzureusCore core) {
    if (tv.isDisposed()) {
      return;
    }

    ArrayList<PEPeer> sources = new ArrayList<PEPeer>();
    Iterator itr = core.getGlobalManager().getDownloadManagers().iterator();
    while (itr.hasNext()) {
      PEPeer[] peers = ((DownloadManager)itr.next()).getCurrentPeers();
      if (peers != null) {
        sources.addAll(Arrays.asList(peers));
      }
    }
    if (sources.isEmpty()) {
      return;
    }
   
    tv.addDataSources(sources.toArray(new PEPeer[sources.size()]));
    tv.processDataSourceQueue();
  }

  private void registerGlobalManagerListener(AzureusCore core) {
    this.active_listener = false;
    try {
      core.getGlobalManager().addListener(this);
    } finally {
      this.active_listener = true;
    }
    addExistingDatasources(core);
  }
 
  private void unregisterListeners() {
    try {
      GlobalManager gm = AzureusCoreFactory.getSingleton().getGlobalManager();
      gm.removeListener(this);
      Iterator itr = gm.getDownloadManagers().iterator();
      while(itr.hasNext()) {
        DownloadManager dm = (DownloadManager)itr.next();
        downloadManagerRemoved(dm);
      }
    } catch (Exception e) {
    }
  }
 
  public void  downloadManagerAdded(DownloadManager dm) {
    dm.addPeerListener(this, !this.active_listener);
  }
  public void  downloadManagerRemoved(DownloadManager dm) {
    dm.removePeerListener(this);
  }
 
  // Methods I have to implement but have no need for...
  public void  destroyInitiated() {}   
  public void destroyed() {}
    public void seedingStatusChanged(boolean seeding_only_mode, boolean b) {}
  public void addThisColumnSubMenu(String columnName, Menu menuThisColumn) {}
  public void peerManagerAdded(PEPeerManager manager){}
  public void peerManagerRemoved(PEPeerManager manager) {}
  public void peerManagerWillBeAdded(PEPeerManager manager) {}
}
TOP

Related Classes of org.gudy.azureus2.ui.swt.views.PeerSuperView

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.