/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.search;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.search.internal.ui.text.IFileSearchContentProvider;
import org.eclipse.search.ui.text.AbstractTextSearchResult;
/**
* Seam table content provider used in seam search page
*
* @author Jeremy
*
*/
public class SeamTableContentProvider implements IStructuredContentProvider, IFileSearchContentProvider {
private final Object[] EMPTY_ARR= new Object[0];
private SeamSearchResultPage fPage;
private AbstractTextSearchResult fResult;
/**
* Constructs SeamTableContentProvider object
*
* @param page
*/
public SeamTableContentProvider(SeamSearchResultPage page) {
fPage= page;
}
/**
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
// nothing to do
}
/**
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
if (inputElement instanceof SeamSearchResult) {
int elementLimit= getElementLimit();
Object[] elements= ((SeamSearchResult)inputElement).getElements();
if (elementLimit != -1 && elements.length > elementLimit) {
Object[] shownElements= new Object[elementLimit];
System.arraycopy(elements, 0, shownElements, 0, elementLimit);
return shownElements;
}
return elements;
}
return EMPTY_ARR;
}
/**
* (non-Javadoc)
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
if (newInput instanceof SeamSearchResult) {
fResult= (SeamSearchResult) newInput;
}
}
/**
* (non-Javadoc)
* @see org.eclipse.search.internal.ui.text.IFileSearchContentProvider#elementsChanged(java.lang.Object[])
*/
public void elementsChanged(Object[] updatedElements) {
TableViewer viewer= getViewer();
int elementLimit= getElementLimit();
boolean tableLimited= elementLimit != -1;
for (int i= 0; i < updatedElements.length; i++) {
if (fResult.getMatchCount(updatedElements[i]) > 0) {
if (viewer.testFindItem(updatedElements[i]) != null)
viewer.update(updatedElements[i], null);
else {
if (!tableLimited || viewer.getTable().getItemCount() < elementLimit)
viewer.add(updatedElements[i]);
}
} else
viewer.remove(updatedElements[i]);
}
}
private int getElementLimit() {
return fPage.getElementLimit().intValue();
}
private TableViewer getViewer() {
return (TableViewer) fPage.getViewer();
}
/**
* (non-Javadoc)
* @see org.eclipse.search.internal.ui.text.IFileSearchContentProvider#clear()
*/
public void clear() {
getViewer().refresh();
}
}