package eu.jucy.gui.uploadqueue;
import helpers.IObservable;
import helpers.StatusObject;
import helpers.Observable.IObserver;
import java.util.Arrays;
import logger.LoggerFactory;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
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.Table;
import uc.files.UploadQueue.UploadInfo;
import uihelpers.DelayedTableUpdater;
import uihelpers.SUIJob;
import uihelpers.TableViewerAdministrator;
import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor;
import eu.jucy.gui.GUIPI;
import eu.jucy.gui.UCEditor;
import eu.jucy.gui.UserColumns.NameUserCol;
import eu.jucy.gui.texteditor.hub.HubEditor;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.FirstRequestCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.LastRequestCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.NameRequestedCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.PositionCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.RequestsReceivedCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.SlotReceivedCol;
import eu.jucy.gui.uploadqueue.UploadQueueColumns.TotalSizeCol;
public class UploadQueueEditor extends UCEditor implements IObserver<StatusObject> {
private static Logger logger = LoggerFactory.make();
static {
//logger.setLevel(Platform.inDevelopmentMode()? Level.DEBUG:Level.INFO);
}
public static final String ID = "eu.jucy.gui.UploadQueue";
private Table table;
private TableViewer tableViewer;
private TableViewerAdministrator<UploadInfo> tva;
private DelayedTableUpdater<UploadInfo> update;
@Override
public void createPartControl(Composite arg0) {
logger.debug("create upqueue");
GridLayout gridLayout = new GridLayout();
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));
tva = new TableViewerAdministrator<UploadInfo>(tableViewer,
Arrays.asList(NameUserCol.<UploadInfo>get(),new NameRequestedCol(),new TotalSizeCol(),
new FirstRequestCol(),new RequestsReceivedCol(),new LastRequestCol(),
new SlotReceivedCol(),new PositionCol()),
GUIPI.uploadQueueTable,7);
tva.apply();
update = new DelayedTableUpdater<UploadInfo>(tableViewer);
tableViewer.setContentProvider(new UploadQueueProvider());
tableViewer.addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement,Object element) {
UploadInfo ui = (UploadInfo)element;
long milisecondssincelast = System.currentTimeMillis()- ui.getLastRequest().getTime();
return milisecondssincelast < 1000*60*10; //only show users with requests in the last 10 minutes..
}
});
getSite().setSelectionProvider(tableViewer);
createContextPopup(HubEditor.ID, tableViewer);
ApplicationWorkbenchWindowAdvisor.get().getUpQueue().addObserver(this);
tableViewer.setInput(ApplicationWorkbenchWindowAdvisor.get().getUpQueue());
new SUIJob(table) {
@Override
public void run() {
update.clear();
tableViewer.setInput(ApplicationWorkbenchWindowAdvisor.get().getUpQueue());
schedule(10*1000);
}
}.schedule(10*1000);
setControlsForFontAndColour(table);
}
@Override
public void dispose() {
ApplicationWorkbenchWindowAdvisor.get().getUpQueue().deleteObserver(this);
super.dispose();
}
@Override
public void setFocus() {
table.setFocus();
}
public void update(IObservable<StatusObject> arg0, final StatusObject st) {
if (st.getValue() instanceof UploadInfo) {
update.put(st.getType(), (UploadInfo)st.getValue());
}
}
}