/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
/**
*
*/
package org.ebayopensource.turmeric.eclipse.services.search;
import org.ebayopensource.turmeric.eclipse.services.search.SOASearchResult.SOASearchResultService;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
/**
* The Class SOASearchResultPage.
*
* @author yayu
*/
public class SOASearchResultPage extends AbstractTextSearchViewPage {
private SOASearchTableContentProvider fContentProvider;
/**
* Instantiates a new sOA search result page.
*/
public SOASearchResultPage() {
super(FLAG_LAYOUT_FLAT);
}
/* (non-Javadoc)
* @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#elementsChanged(java.lang.Object[])
*/
@Override
protected void elementsChanged(Object[] objects) {
if (fContentProvider != null)
fContentProvider.elementsChanged(objects);
}
/* (non-Javadoc)
* @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#clear()
*/
@Override
protected void clear() {
if (fContentProvider != null)
fContentProvider.clear();
}
/* (non-Javadoc)
* @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTableViewer(org.eclipse.jface.viewers.TableViewer)
*/
@Override
protected void configureTableViewer(final TableViewer viewer) {
viewer.setLabelProvider(new SOASearchTableLabelProvider());
fContentProvider = new SOASearchTableContentProvider();
viewer.setContentProvider(fContentProvider);
final Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
//set the columns for the table and the sorter used for he table
{
final TableLayout layout = new TableLayout();
layout.addColumnData(new ColumnWeightData(35, 150, true));
layout.addColumnData(new ColumnWeightData(15, 100, true));
layout.addColumnData(new ColumnWeightData(15, 120, true));
table.setLayout(layout);
viewer.setSorter(new SOASearchResultTableViewerSorter());
TableColumn svcNameColumn = new TableColumn(table, SWT.LEFT);
svcNameColumn.setText("Service Name");
svcNameColumn.addSelectionListener
(new TableSortSelectionAdatper(viewer, svcNameColumn, 0));
TableColumn svcLayerColumn = new TableColumn(table, SWT.LEFT);
svcLayerColumn.setText("Service Layer");
svcLayerColumn.addSelectionListener
(new TableSortSelectionAdatper(viewer, svcLayerColumn, 1));
TableColumn svcVersionColumn = new TableColumn(table, SWT.LEFT);
svcVersionColumn.setText("Service Version");
svcVersionColumn.addSelectionListener
(new TableSortSelectionAdatper(viewer, svcVersionColumn, 2));
}
//add the viewer as the selection provider
getSite().setSelectionProvider(viewer);
}
/* (non-Javadoc)
* @see org.eclipse.search.ui.text.AbstractTextSearchViewPage#configureTreeViewer(org.eclipse.jface.viewers.TreeViewer)
*/
@Override
protected void configureTreeViewer(TreeViewer viewer) {
}
private static class SOASearchResultTableViewerSorter extends ViewerSorter {
//0=service name, 1=service layer, 2=service version
private int column;
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
int result = 0;
if (e1 instanceof SOASearchResultService
&& e2 instanceof SOASearchResultService) {
SOASearchResultService svc1 = (SOASearchResultService) e1;
SOASearchResultService svc2 = (SOASearchResultService) e2;
switch (column) {
case 0:
result = svc1.getServiceName()
.compareToIgnoreCase(svc2.getServiceName());
break;
case 1:
result = svc1.getServiceLayer()
.compareToIgnoreCase(svc2.getServiceLayer());
break;
case 2:
result = svc1.getServiceVersion()
.compareToIgnoreCase(svc2.getServiceVersion());
break;
}
}
// If descending order, flip the direction
if (viewer instanceof TableViewer
&& ((TableViewer)viewer).getTable()
.getSortDirection() == SWT.DOWN) {
result = -result;
}
return result;
}
}
private static class TableSortSelectionAdatper extends SelectionAdapter {
private TableColumn tableColumn;
private TableViewer viewer;
private int index;
public TableSortSelectionAdatper(TableViewer viewer,
TableColumn column, int index) {
super();
this.tableColumn = column;
this.viewer = viewer;
this.index = index;
}
@Override
public void widgetSelected(SelectionEvent e)
{
if (viewer.getSorter() instanceof SOASearchResultTableViewerSorter) {
((SOASearchResultTableViewerSorter)viewer.getSorter())
.column = index;
}
//find the sort direction seen on the column while sorting
int dir = viewer.getTable().getSortDirection();
if (viewer.getTable().getSortColumn() == tableColumn) {
dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
} else {
dir = SWT.DOWN;
}
viewer.getTable().setSortDirection(dir);
viewer.getTable().setSortColumn(tableColumn);
//refresh the table to see the change
viewer.refresh();
}
}
}