/***************************************************************************** * Copyright (c) 2008 g-Eclipse Consortium * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Szymon Mueller - initial API and implementation *****************************************************************************/ package eu.geclipse.ui.internal.transfer; import java.util.ArrayList; import java.util.List; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IconAndMessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import eu.geclipse.core.filesystem.GEclipseURI; import eu.geclipse.core.filesystem.TransferInformation; /** * Dialog for transfer resuming. * */ public class TransferResumeDialog extends IconAndMessageDialog { List<TransferInformation> operationsToResume = new ArrayList<TransferInformation>(); private List<TransferInformation> operations; private CheckboxTableViewer tableViewer; protected TransferResumeDialog( final Shell parentShell, final List<TransferInformation> operations ) { super( parentShell ); setShellStyle( SWT.TITLE | SWT.BORDER | SWT.RESIZE | SWT.MIN | SWT.MAX | SWT.YES ); this.operations = operations; this.message = "Following transfers were not completed. " + "Select transfers you want to resume and press Resume. " + "All transfers which were not selected to resume will be abandoned"; } @Override protected void configureShell( final Shell newShell ) { super.configureShell( newShell ); newShell.setText( "Transfer resuming" ); } @Override protected Control createDialogArea( final Composite parent ) { Composite mainComp = new Composite( parent, SWT.NONE ); mainComp.setLayout( new GridLayout( 1, false ) ); mainComp.setLayoutData( new GridData( GridData.FILL_BOTH ) ); Composite msgComp = new Composite( mainComp, SWT.BORDER ); msgComp.setLayout( new GridLayout( 2, false ) ); msgComp.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, true ) ); createMessageArea(msgComp); // Composite composite = ( Composite )super.createDialogArea( parent ); Composite composite = ( Composite )super.createDialogArea( mainComp ); composite.setLayout( new GridLayout( 1, false ) ); composite.setLayoutData( new GridData( GridData.FILL_BOTH ) ); Group group = new Group( composite, SWT.SHADOW_OUT ); group.setLayout( new GridLayout( 1, false ) ); group.setText( "Pending transfers" ); GridData gData = new GridData( GridData.FILL_HORIZONTAL ); gData.grabExcessHorizontalSpace = true; gData.heightHint = 150; gData.verticalIndent = 20; group.setLayoutData( gData ); int style = SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE | SWT.CHECK; Table table = new Table( group, style ); gData = new GridData( SWT.FILL, SWT.FILL, true, false ); table.setLayoutData( gData ); table.setHeaderVisible( true ); TableColumn checkCol = new TableColumn( table, SWT.CENTER ); checkCol.setWidth( 20 ); TableColumn nameCol = new TableColumn( table, SWT.CENTER ); nameCol.setText( "Name" ); nameCol.setWidth( 80 ); TableColumn sizeCol = new TableColumn( table, SWT.LEFT ); sizeCol.setText( "Size" ); sizeCol.setWidth( 50 ); TableColumn fromCol = new TableColumn( table, SWT.LEFT ); fromCol.setText( "From" ); fromCol.setWidth( 350 ); TableColumn toCol = new TableColumn( table, SWT.LEFT ); toCol.setText( "To" ); toCol.setWidth( 350 ); this.tableViewer = new CheckboxTableViewer( table ); this.tableViewer.setContentProvider( new TransferContentProvider() ); this.tableViewer.setLabelProvider( new TransferLabelProvider() ); if( this.operations != null && this.operations.size() > 0 ) { this.tableViewer.setInput( this.operations ); for( TransferInformation op: this.operations ) { this.operationsToResume.add( op ); } } else { //No operations to show } this.tableViewer.setAllChecked( true ); this.tableViewer.addCheckStateListener( new ICheckStateListener() { public void checkStateChanged( final CheckStateChangedEvent event ) { if( event.getChecked() ) { Object obj = event.getElement(); if( obj instanceof TransferInformation ) { TransferResumeDialog.this.operationsToResume.add( ( TransferInformation )obj ); } } else { Object obj = event.getElement(); if( obj instanceof TransferInformation ) { TransferResumeDialog.this.operationsToResume.remove( obj ); } } } } ); return composite; } @Override protected void createButtonsForButtonBar(final Composite parent) { // create OK and Cancel buttons by default createButton(parent, IDialogConstants.OK_ID, "Resume selected", true); createButton(parent, IDialogConstants.NO_ID, "Abandon all transfers", false ); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } @Override protected void buttonPressed(final int buttonId) { super.buttonPressed( buttonId ); if( IDialogConstants.NO_ID == buttonId ) { noPressed(); } } private void noPressed(){ setReturnCode( IDialogConstants.NO_ID ); close(); } public List<TransferInformation> getOperationsToResume() { return this.operationsToResume; } class TransferContentProvider implements IStructuredContentProvider { public Object[] getElements( final Object inputElement ) { List<TransferInformation> result = new ArrayList<TransferInformation>(); if( inputElement instanceof List ) { for( Object obj : ( List )inputElement ) { if( obj instanceof TransferInformation ) { result.add( ( TransferInformation )obj ); } } } return result.toArray(); } public void dispose() { // TODO Auto-generated method stub } public void inputChanged( final Viewer viewer, final Object oldInput, final Object newInput ) { // TODO Auto-generated method stub } } class TransferLabelProvider implements ITableLabelProvider { public Image getColumnImage( final Object element, final int columnIndex ) { // TODO Auto-generated method stub return null; } public String getColumnText( final Object element, final int columnIndex ) { String columnText = ""; //$NON-NLS-1$ if( element instanceof TransferInformation ) { TransferInformation operation = ( TransferInformation )element; String source = ""; String name = ""; String destination = ""; String length = ""; IFileStore sourceStore = operation.getSource(); GEclipseURI sourceURI = new GEclipseURI( sourceStore.toURI() ); source = sourceURI.toSlaveURI().toString(); Path path = new Path( sourceStore.toURI().getPath() ); name = path.lastSegment(); GEclipseURI destinationURI = new GEclipseURI( operation.getDestination() .toURI() ); destination = destinationURI.toSlaveURI().toString(); // TODO better size handling long size = operation.getSize(); if( size / ( 1024 * 1024 * 1024 ) > 1 ) { length = String.valueOf( size / ( 1024 * 1024 * 1024 ) ) + " GB"; } else if( size / ( 1024 * 1024 ) > 1 ) { length = String.valueOf( size / ( 1024 * 1024 ) ) + " MB"; } else if( size / 1024 > 1 ) { length = String.valueOf( size / 1024 ) + " KB"; } // length = String.valueOf( operation.getSize() ); switch( columnIndex ) { case 1: columnText = name; break; case 2: columnText = length; break; case 3: columnText = source; break; case 4: columnText = destination; break; default: break; } } return columnText; } public void addListener( final ILabelProviderListener listener ) { // TODO Auto-generated method stub } public void dispose() { // TODO Auto-generated method stub } public boolean isLabelProperty( final Object element, final String property ) { // TODO Auto-generated method stub return false; } public void removeListener( final ILabelProviderListener listener ) { // TODO Auto-generated method stub } } @Override protected Image getImage() { return getInfoImage(); } }