/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.cluster.view.internal;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation;
import de.rcenvironment.core.utils.cluster.ClusterJobInformation.ClusterJobState;
/**
* Listener for GUI-elements such as check box, drop down box, and text field to realize changes.
* In case of changes it pushes to refresh displaying the data and organizes filtering table data.
*
* @author Doreen Seider
*/
public class ClusterJobInformationTableFilter extends ViewerFilter implements SelectionListener, KeyListener {
private boolean queuedSetup;
private boolean runningSetup;
private boolean othersSetup;
private ClusterJobMonitorView clusterJobMonitoringView;
private TableViewer tableViewer;
public ClusterJobInformationTableFilter(ClusterJobMonitorView loggingView, TableViewer tableViewer) {
clusterJobMonitoringView = loggingView;
this.tableViewer = tableViewer;
updateTableView();
tableViewer.getTable().setFocus();
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
boolean returnValue = false;
if (element instanceof ClusterJobInformation) {
ClusterJobInformation logEntry = (ClusterJobInformation) element;
if (isLevelSelected(logEntry.getJobState())) {
if (isSelectedBySearchTerm(logEntry.getJobId())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getJobName())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getUser())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getQueue())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getRemainingTime())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getStartTime())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getQueueTime())) {
returnValue = true;
} else if (isSelectedBySearchTerm(logEntry.getJobState().toString())) {
returnValue = true;
}
}
}
return returnValue;
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}
@Override
public void widgetSelected(SelectionEvent e) {
updateTableView();
tableViewer.getTable().setFocus();
}
@Override
public void keyPressed(KeyEvent arg0) {
// do nothing
}
@Override
public void keyReleased(KeyEvent arg0) {
updateTableView();
}
private void updateTableView() {
queuedSetup = clusterJobMonitoringView.getQueuedSelection();
runningSetup = clusterJobMonitoringView.getRunningSelection();
othersSetup = clusterJobMonitoringView.getOthersSelection();
ClusterJobInformationModel.getInstance()
.setSelectedConnectedConfigurationName(clusterJobMonitoringView.getSelectedConnectedConfigurationName());
tableViewer.refresh();
}
private boolean isLevelSelected(ClusterJobState jobState) {
boolean returnValue = false;
if (ClusterJobState.Queued == jobState && queuedSetup) {
returnValue = true;
} else if (ClusterJobState.Running == jobState && runningSetup) {
returnValue = true;
} else if (ClusterJobState.Completed != jobState
&& ClusterJobState.Queued != jobState
&& ClusterJobState.Running != jobState && othersSetup) {
returnValue = true;
}
return returnValue;
}
private boolean isSelectedBySearchTerm(String entryText) {
boolean returnValue = false;
String searchTerm = clusterJobMonitoringView.getSearchText();
if (searchTerm == null || searchTerm.length() == 0) {
returnValue = true;
} else if (textMatchesSearchTerm(searchTerm, entryText)) {
returnValue = true;
}
return returnValue;
}
private boolean textMatchesSearchTerm(String searchTerm, String entryText) {
// search is case insensitive - see also method 'setSearchTerm'
return entryText.toLowerCase().contains(searchTerm.toLowerCase());
}
}