/*
* Created on Feb 2, 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 com.aelitis.azureus.ui.swt.devices;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.gudy.azureus2.core3.util.AEThread2;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT;
import org.gudy.azureus2.ui.swt.shells.CoreWaiterSWT.TriggerInThread;
import com.aelitis.azureus.core.AzureusCore;
import com.aelitis.azureus.core.AzureusCoreRunningListener;
import com.aelitis.azureus.core.devices.Device;
import com.aelitis.azureus.plugins.net.netstatus.NetStatusPlugin;
import com.aelitis.azureus.plugins.net.netstatus.swt.NetStatusPluginTester;
public class
DeviceInternetView
extends DeviceManagerUI.categoryView
{
private DeviceManagerUI device_manager_ui;
private NetStatusPlugin plugin;
private Composite main;
private Button start_button;
private Button cancel_button;
private StyledText log;
private static final int
selected_tests = NetStatusPluginTester.TEST_INBOUND |
NetStatusPluginTester.TEST_OUTBOUND |
NetStatusPluginTester.TEST_NAT_PROXIES;
private NetStatusPluginTester current_test;
private static final int LOG_NORMAL = 1;
private static final int LOG_SUCCESS = 2;
private static final int LOG_ERROR = 3;
private static final int LOG_INFO = 4;
private int log_type = LOG_NORMAL;
protected
DeviceInternetView(
DeviceManagerUI dm_ui,
String title )
{
super( dm_ui, Device.DT_INTERNET, title );
device_manager_ui = dm_ui;
}
public void
initialize(
Composite parent )
{
PluginInterface pi = device_manager_ui.getPluginInterface().getPluginManager().getPluginInterfaceByClass( NetStatusPlugin.class );
plugin = (NetStatusPlugin)pi.getPlugin();
main = new Composite( parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginTop = 4;
layout.marginBottom = 4;
layout.marginHeight = 4;
layout.marginWidth = 4;
main.setLayout(layout);
GridData grid_data = new GridData(GridData.FILL_BOTH );
main.setLayoutData(grid_data);
Label info_lab = new Label( main, SWT.NONE );
info_lab.setText( "Test your internet connection" );
// control
Composite control = new Composite(main, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 3;
layout.marginHeight = 4;
layout.marginWidth = 4;
control.setLayout(layout);
grid_data = new GridData(GridData.FILL_HORIZONTAL);
grid_data.horizontalSpan = 1;
control.setLayoutData(grid_data);
// start
start_button = new Button( control, SWT.PUSH );
Messages.setLanguageText( start_button, "ConfigView.section.start");
start_button.addSelectionListener(
new SelectionAdapter()
{
public void
widgetSelected(
SelectionEvent e )
{
start_button.setEnabled( false );
cancel_button.setEnabled( true );
startTest();
}
});
// cancel
cancel_button = new Button( control, SWT.PUSH );
Messages.setLanguageText( cancel_button, "UpdateWindow.cancel");
cancel_button.addSelectionListener(
new SelectionAdapter()
{
public void
widgetSelected(
SelectionEvent e )
{
cancel_button.setEnabled( false );
cancelTest();
}
});
cancel_button.setEnabled( false );
// log area
log = new StyledText(main,SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
grid_data = new GridData(GridData.FILL_BOTH);
grid_data.horizontalSpan = 1;
grid_data.horizontalIndent = 4;
log.setLayoutData(grid_data);
log.setIndent( 4 );
}
protected void
startTest()
{
CoreWaiterSWT.waitForCore(TriggerInThread.NEW_THREAD,
new AzureusCoreRunningListener() {
public void azureusCoreRunning(AzureusCore core) {
startTestSupport(core);
}
});
}
protected void
cancelTest()
{
new AEThread2( "NetStatus:cancel", true )
{
public void
run()
{
cancelTestSupport();
}
}.start();
}
protected void
startTestSupport(
AzureusCore core)
{
try{
synchronized( this ){
if ( current_test != null ){
Debug.out( "Test already running!!!!" );
return;
}
current_test =
new NetStatusPluginTester(
plugin,
selected_tests,
new NetStatusPluginTester.loggerProvider()
{
public void
log(
String str)
{
println( str );
}
public void
logSuccess(
String str)
{
try{
log_type = LOG_SUCCESS;
println( str );
}finally{
log_type = LOG_NORMAL;
}
}
public void
logInfo(
String str)
{
try{
log_type = LOG_INFO;
println( str );
}finally{
log_type = LOG_NORMAL;
}
}
public void
logFailure(
String str)
{
try{
log_type = LOG_ERROR;
println( str );
}finally{
log_type = LOG_NORMAL;
}
}
});
}
println( "Test starting", true );
current_test.run(core);
println( current_test.isCancelled()?"Test Cancelled":"Test complete" );
}catch( Throwable e ){
}finally{
try{
Composite c = main;
if ( c != null && !c.isDisposed()){
try{
c.getDisplay().asyncExec(
new Runnable()
{
public void
run()
{
if ( !start_button.isDisposed()){
start_button.setEnabled( true );
}
if ( !cancel_button.isDisposed()){
cancel_button.setEnabled( false );
}
}
});
}catch( Throwable e ){
}
}
}finally{
synchronized( this ){
current_test.cancel();
current_test = null;
}
}
}
}
protected void
println(
String str )
{
print( str + "\n", false );
}
protected void
println(
String str,
boolean clear_first )
{
print( str + "\n", clear_first );
}
protected void
print(
final String str,
final boolean clear_first )
{
if ( !( log.isDisposed() || log.getDisplay().isDisposed())){
final int f_log_type = log_type;
log.getDisplay().asyncExec(
new Runnable()
{
public void
run()
{
if ( log.isDisposed()){
return;
}
int start;
if ( clear_first ){
start = 0;
log.setText( str );
}else{
start = log.getText().length();
log.append( str );
}
Color color;
if ( f_log_type == LOG_NORMAL ){
color = Colors.black;
}else if ( f_log_type == LOG_SUCCESS ){
color = Colors.green;
}else if ( f_log_type == LOG_INFO ){
color = Colors.blue;
}else{
color = Colors.red;
}
StyleRange styleRange = new StyleRange();
styleRange.start = start;
styleRange.length = str.length();
styleRange.foreground = color;
log.setStyleRange(styleRange);
log.setSelection( log.getText().length());
}
});
}
}
protected void
cancelTestSupport()
{
synchronized( this ){
if ( current_test != null ){
println( "Cancelling test..." );
current_test.cancel();
}
}
}
public Composite
getComposite()
{
return( main );
}
public void
delete()
{
super.delete();
}
}