Skip to main content
summaryrefslogblamecommitdiffstats
blob: 12b0849a0957d7f938fb1bdab6cb053fc0c52dd3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                                                                                
                                                                       







                                                                                 
                                                   
 


                                             

                                                 


                                                  
                                                                  

                                                                            

                                                     
                                              
                                                     


                                                             

                                               


                                           



                                             
                                           
 
   
                                               
                                                             


                       
   
                                                                                                  
 
                                                
 
                                                   

                                                      
 
                                                   
 
                                                 
 

                                             
                                                               
 
                                                                                                                       
 
                                                                
 
                                     
 
                                                            
 
                                                               
 
                                                          



                                                                                                




                                                      


                      
                                             

                                             
 
                                                                                                         
                                                                                                              
                                                 
 
                                                                                        



                                                          

                                                                     




                                

                                                    







                                                                           
 
                 


                                                                                    
 




                                                                 
                                                                           


                                                                            
 
                                                          



                                                                                          




                                                                                

                                                                                      
                                                                         

                                 

                 

                                                                                                             
                                                                                      





                                                                                                                                    
                                                                                      


                                                                                      
                                               
 
                                                                                                


           
                                                                        

                           
                                                 
           
                                                 

                                                      

                                    
                                                                     
                              
                                       
                                                                              
                              
                                    
                                                                           




                                                                            
                                                                           

                              

                                                                 
         
 
                                      
                                                 



                                                             






                                                              

                                                                                                     
                                                                                       
                
                                                                                                                                    




                                                          
 
                                                 
                                                                                                 




                                                                                                               
 

                                                                                      

                                                                                        


                                                                               
                                                                                                                                 
                                                                                 

































                                                                              





                                                                             

         
 
/*******************************************************************************
 * Copyright (c) 2003 - 2006 University Of British Columbia and others.
 * 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
 *
 * Contributors:
 *     University Of British Columbia - initial API and implementation
 *******************************************************************************/
package org.eclipse.mylar.internal.tasks.ui.search;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.mylar.internal.tasks.ui.TaskListColorsAndFonts;
import org.eclipse.mylar.internal.tasks.ui.views.TaskElementLabelProvider;
import org.eclipse.mylar.internal.tasks.ui.views.TaskListTableLabelProvider;
import org.eclipse.mylar.tasks.core.AbstractQueryHit;
import org.eclipse.mylar.tasks.ui.TasksUiPlugin;
import org.eclipse.mylar.tasks.ui.TasksUiUtil;
import org.eclipse.search.internal.ui.SearchMessages;
import org.eclipse.search.ui.IContextMenuConstants;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.search.ui.text.Match;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.IShowInTargetList;
import org.eclipse.ui.themes.IThemeManager;

/**
 * Displays the results of a Repository search.
 * @see org.eclipse.search.ui.text.AbstractTextSearchViewPage
 * 
 * @author Rob Elves
 * @author Mik Kersten 
 */
public class RepositorySearchResultView extends AbstractTextSearchViewPage implements IAdaptable {

	// The categories to sort bug results by

	public static final int ORDER_PRIORITY = 1;

	public static final int ORDER_DESCRIPTION = 2;

	public static final int ORDER_SEVERITY = 3;

	public static final int ORDER_STATUS = 4;

	public static final int ORDER_ID = 5;

	public static final int ORDER_DEFAULT = ORDER_PRIORITY;

	private static final String KEY_SORTING = TasksUiPlugin.PLUGIN_ID + ".search.resultpage.sorting"; //$NON-NLS-1$

	private SearchResultContentProvider taskContentProvider;

	private int currentSortOrder;

	private SearchResultSortAction sortByPriorityAction;

	private SearchResultSortAction sortByDescriptionAction;

	private OpenSearchResultAction openInEditorAction;

	private static final String[] SHOW_IN_TARGETS = new String[] { IPageLayout.ID_RES_NAV };

	private static final IShowInTargetList SHOW_IN_TARGET_LIST = new IShowInTargetList() {
		public String[] getShowInTargetIds() {
			return SHOW_IN_TARGETS;
		}
	};

	/**
	 * Constructor
	 */
	public RepositorySearchResultView() {
		// Only use the table layout.
		super(FLAG_LAYOUT_FLAT);

		sortByPriorityAction = new SearchResultSortAction("Task Priority", this, ORDER_PRIORITY);
		sortByDescriptionAction = new SearchResultSortAction("Task Summary", this, ORDER_DESCRIPTION);
		currentSortOrder = ORDER_DEFAULT;

		openInEditorAction = new OpenSearchResultAction("Open in Editor", this);
	}

	@Override
	protected void elementsChanged(Object[] objects) {
		if (taskContentProvider != null) {
			taskContentProvider.elementsChanged(objects);
		}
	}

	@Override
	protected void clear() {
		if (taskContentProvider != null) {
			taskContentProvider.clear();
		}
	}

	// Allows the inherited method "getViewer" to be accessed publicly.
	@Override
	public StructuredViewer getViewer() {
		return super.getViewer();
	}

	@Override
	protected void configureTreeViewer(TreeViewer viewer) {
		// The tree layout is not used, so this function does not need to do
		// anything.

	}

	@Override
	protected void configureTableViewer(TableViewer viewer) {
		viewer.setUseHashlookup(true);
		String[] columnNames = new String[] { "", "!", "Summary" };
		TableColumn[] columns = new TableColumn[columnNames.length];
		int[] columnWidths = new int[] { 20, 20, 500 };
		viewer.setColumnProperties(columnNames);

		viewer.getTable().setHeaderVisible(false);
		for (int i = 0; i < columnNames.length; i++) {
			columns[i] = new TableColumn(viewer.getTable(), 0, i); // SWT.LEFT
			columns[i].setText(columnNames[i]);
			columns[i].setWidth(columnWidths[i]);
			columns[i].setData(new Integer(i));
			columns[i].addSelectionListener(new SelectionAdapter() {

				@Override
				public void widgetSelected(SelectionEvent e) {
					TableColumn col = (TableColumn) e.getSource();
					Integer integer = (Integer) col.getData();
					setSortOrder(integer.intValue());
				}
			});
		}

		IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
		Color categoryBackground = themeManager.getCurrentTheme().getColorRegistry().get(
				TaskListColorsAndFonts.THEME_COLOR_TASKLIST_CATEGORY);

		SearchViewTableLabelProvider taskListTableLabelProvider = new SearchViewTableLabelProvider(
				new TaskElementLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(),
				categoryBackground);

		viewer.setLabelProvider(taskListTableLabelProvider);
		viewer.setContentProvider(new SearchResultTableContentProvider(this));

		// Set the order when the search view is loading so that the items are
		// sorted right away
		setSortOrder(currentSortOrder);

		taskContentProvider = (SearchResultContentProvider) viewer.getContentProvider();
	}

	/**
	 * Sets the new sorting category, and reorders all of the tasks.
	 * 
	 * @param sortOrder
	 *            The new category to sort by
	 */
	public void setSortOrder(int sortOrder) {
		StructuredViewer viewer = getViewer();

		switch (sortOrder) {
		case ORDER_ID:
			viewer.setSorter(new SearchResultSorterId());
			break;
		case ORDER_DESCRIPTION:
			viewer.setSorter(new SearchResultSorterDescription());
			break;
		case ORDER_PRIORITY:
			viewer.setSorter(new SearchResultSorterPriority());
			break;
		default:
			// If the setting is not one of the four valid ones,
			// use the default order setting.
			sortOrder = ORDER_DEFAULT;
			viewer.setSorter(new SearchResultSorterPriority());
			break;
		}
		currentSortOrder = sortOrder;
		getSettings().put(KEY_SORTING, currentSortOrder);
	}

	@SuppressWarnings("unchecked")
	public Object getAdapter(Class adapter) {
		return getAdapterDelegate(adapter);
	}

	private Object getAdapterDelegate(Class<?> adapter) {
		if (IShowInTargetList.class.equals(adapter)) {
			return SHOW_IN_TARGET_LIST;
		}
		return null;
	}

	@Override
	protected void showMatch(Match match, int currentOffset, int currentLength, boolean activate)
			throws PartInitException {
		AbstractQueryHit repositoryHit = (AbstractQueryHit) match.getElement();
		
		TasksUiUtil.openRepositoryTask(repositoryHit.getRepositoryUrl(), repositoryHit.getTaskId(), repositoryHit.getUrl());
	}

	@Override
	protected void fillContextMenu(IMenuManager mgr) {
		super.fillContextMenu(mgr);

		// Create the submenu for sorting
		MenuManager sortMenu = new MenuManager(SearchMessages.SortDropDownAction_label); 
		sortMenu.add(sortByPriorityAction);
		sortMenu.add(sortByDescriptionAction);

		sortByPriorityAction.setChecked(currentSortOrder == sortByPriorityAction.getSortOrder());
		sortByDescriptionAction.setChecked(currentSortOrder == sortByDescriptionAction.getSortOrder());

		// Add the new context menu items
		mgr.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, sortMenu);
		mgr.appendToGroup(IContextMenuConstants.GROUP_OPEN, openInEditorAction);
	}

	class SearchViewTableLabelProvider extends TaskListTableLabelProvider {

		public SearchViewTableLabelProvider(ILabelProvider provider, ILabelDecorator decorator, Color parentBackground) {
			super(provider, decorator, parentBackground, null, true);
		}

		@Override
		public Image getColumnImage(Object element, int columnIndex) {
			switch (columnIndex) {
			case 0:
				++columnIndex;
				break;
			case 1:
				++columnIndex;
				break;
			case 2:
				columnIndex = 2 + columnIndex;
				break;
			}
			return super.getColumnImage(element, columnIndex);
		}

		@Override
		public String getColumnText(Object obj, int columnIndex) {
			switch (columnIndex) {
			case 0:
				++columnIndex;
				break;
			case 1:
				++columnIndex;
				break;
			case 2:
				columnIndex = 2 + columnIndex;
				break;
			}
			return super.getColumnText(obj, columnIndex);
		}

		@Override
		public Color getBackground(Object element, int columnIndex) {
			// Note: see bug 142889
			return null;
		}

	}

}

Back to the top