1 /*******************************************************************************
2 * Copyright (c) 2000, 2011 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.search;
13 import java.util.HashSet;
16 import org.eclipse.swt.widgets.Table;
18 import org.eclipse.jface.viewers.TableViewer;
20 import org.eclipse.search.ui.text.AbstractTextSearchResult;
22 public class JavaSearchTableContentProvider extends JavaSearchContentProvider {
23 public JavaSearchTableContentProvider(JavaSearchResultPage page) {
26 public Object[] getElements(Object inputElement) {
27 if (inputElement instanceof AbstractTextSearchResult) {
28 Set<Object> filteredElements= new HashSet<Object>();
29 Object[] rawElements= ((AbstractTextSearchResult)inputElement).getElements();
30 int limit= getPage().getElementLimit().intValue();
31 for (int i= 0; i < rawElements.length; i++) {
32 if (getPage().getDisplayedMatchCount(rawElements[i]) > 0) {
33 filteredElements.add(rawElements[i]);
34 if (limit != -1 && limit < filteredElements.size()) {
39 return filteredElements.toArray();
45 public void elementsChanged(Object[] updatedElements) {
46 if (getSearchResult() == null)
49 int addLimit= getAddLimit();
51 TableViewer viewer= (TableViewer) getPage().getViewer();
52 Set<Object> updated= new HashSet<Object>();
53 Set<Object> added= new HashSet<Object>();
54 Set<Object> removed= new HashSet<Object>();
55 for (int i= 0; i < updatedElements.length; i++) {
56 if (getPage().getDisplayedMatchCount(updatedElements[i]) > 0) {
57 if (viewer.testFindItem(updatedElements[i]) != null)
58 updated.add(updatedElements[i]);
61 added.add(updatedElements[i]);
66 removed.add(updatedElements[i]);
70 viewer.add(added.toArray());
71 viewer.update(updated.toArray(), new String[] { SearchLabelProvider.PROPERTY_MATCH_COUNT });
72 viewer.remove(removed.toArray());
75 private int getAddLimit() {
76 int limit= getPage().getElementLimit().intValue();
78 Table table= (Table) getPage().getViewer().getControl();
79 int itemCount= table.getItemCount();
80 if (itemCount >= limit) {
83 return limit - itemCount;
85 return Integer.MAX_VALUE;
90 getPage().getViewer().refresh();