package eu.jucy.gui.uploadqueue;
import helpers.IObservable;
import helpers.SizeEnum;
import helpers.StatusObject;
import helpers.Observable.IObserver;
import java.util.Arrays;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
import uc.files.IUploadQueue;
import uc.files.UploadQueue.TransferRecord;
import uihelpers.SUIJob;
import uihelpers.TableViewerAdministrator;
import eu.jucy.gui.GUIPI;
import eu.jucy.gui.Lang;
import eu.jucy.gui.UCEditor;
import eu.jucy.gui.UserColumns.NameUserCol;
import eu.jucy.gui.itemhandler.CommandDoubleClickListener;
import eu.jucy.gui.itemhandler.OpenDirectoryHandler;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.DurationCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.FinishedCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.IPCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.NameTransfCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.PathTransfCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.SizeCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.SpeedCol;
import eu.jucy.gui.uploadqueue.FinishedTransfersColumn.StartedCol;
public class FinishedTransfersEditor extends UCEditor implements IObserver<StatusObject> {
public static final String ID = "eu.jucy.gui.FinishedUploads";
public static final String ID2 = "eu.jucy.gui.FinishedDownloads";
public static final String POPUP_ID = "eu.jucy.gui.FinishedTransfers";
private Label averageSpeed;
private Label totalSize;
private Label totalElements;
private Table table;
private TableViewer tableViewer;
private TableViewerAdministrator<TransferRecord> tva;
private IUploadQueue transfers;
@Override
public void createPartControl(Composite arg0) {
transfers = ((FinishedTransfersEditorInput)getEditorInput()).getInput();
final GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 4;
arg0.setLayout(gridLayout);
tableViewer = new TableViewer(arg0, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER);
table = tableViewer.getTable();
table.setHeaderVisible(true);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
tva = new TableViewerAdministrator<TransferRecord>(tableViewer,
Arrays.asList(NameUserCol.<TransferRecord>get()
,new NameTransfCol(),new SizeCol(),new DurationCol()
, new SpeedCol(),new IPCol(),new StartedCol()
,new FinishedCol(),new PathTransfCol()),
GUIPI.finishedTransfersTable,5);
tva.apply();
final Label label = new Label(arg0, SWT.NONE);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false));
totalElements = new Label(arg0, SWT.BORDER);
totalElements.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));
totalSize = new Label(arg0, SWT.BORDER);
totalSize.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));
averageSpeed = new Label(arg0, SWT.BORDER);
averageSpeed.setLayoutData(new GridData(SWT.DEFAULT, SWT.DEFAULT));
tableViewer.setContentProvider(new FinishedTransfersProvider());
transfers.addObserver(this);
tableViewer.setInput(transfers);
updateLabels();
getSite().setSelectionProvider(tableViewer);
createContextPopup(POPUP_ID, tableViewer);
tableViewer.addDoubleClickListener(new CommandDoubleClickListener(OpenDirectoryHandler.ID));
setControlsForFontAndColour(tableViewer.getTable());
}
@Override
public void dispose() {
transfers.deleteObserver(this);
super.dispose();
}
public void update(IObservable<StatusObject> arg0, final StatusObject so) {
//final StatusObject so = (StatusObject)arg1;
if (so.getValue() instanceof TransferRecord) {
new SUIJob(table) {
@Override
public void run() {
switch(so.getType()) {
case ADDED:
tableViewer.add(so.getValue());
break;
case CHANGED:
tableViewer.refresh(so.getValue());
break;
case REMOVED:
tableViewer.remove(so.getValue());
break;
}
updateLabels();
}
}.schedule();
}
}
private void updateLabels() {
IUploadQueue uq = transfers;
totalElements.setText(String.format(
Lang.TotalElements,
uq.getUploadRecordsSize()));
totalSize.setText(String.format(Lang.TotalSize,
SizeEnum.getReadableSize(uq.getTotalSize())));
averageSpeed.setText(String.format(Lang.AverageSpeed,
SizeEnum.toSpeedString(uq.getTotalDuration(), uq.getTotalSize())));
averageSpeed.pack(true);
totalSize.pack(true);
totalElements.pack(true);
totalElements.getParent().layout();
}
@Override
public void setFocus() {
table.setFocus();
}
/*
public static class OpenDirectoryAction extends Action implements IWorkbenchAction, ISelectionChangedListener {
private static final String ID = "eu.jucy.uploadqueue.OpenDirectory";
private IStructuredSelection selection;
private final IPostSelectionProvider provider;
public OpenDirectoryAction(IPostSelectionProvider provider) {
this.provider = provider;
setId(ID);
provider.addPostSelectionChangedListener(this);
}
public void selectionChanged(IWorkbenchPart part, ISelection incoming) {
if (incoming instanceof IStructuredSelection) {
selection = (IStructuredSelection)incoming;
boolean enabled = selection.getFirstElement() instanceof TransferRecord;
setEnabled(enabled && ((TransferRecord)selection.getFirstElement()).getFile() != null);
} else {
setEnabled(false);
}
}
public void selectionChanged(SelectionChangedEvent event) {
selectionChanged(null,event.getSelection());
}
public void dispose() {
provider.removePostSelectionChangedListener(this);
}
public void run() {
TransferRecord tr = (TransferRecord)selection.getFirstElement();
File folder = tr.getFile().getParentFile();
logger.debug("launching Program");
Program.launch(folder.getPath());
logger.debug("launched Program");
}
} */
}