blob: 157649ec0d36487d48cca1957ef31103734e5166 [file] [log] [blame]
package org.eclipse.platform.discovery.compatibility.internal.contributors.impl.results;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.platform.discovery.compatibility.internal.contributors.impl.searchparams.SearchPageToSearchParamsUIAdapter;
import org.eclipse.platform.discovery.compatibility.internal.contributors.impl.searchparams.SearchPageToSearchParamsUIAdapter.WokbenchContext;
import org.eclipse.platform.discovery.compatibility.internal.readers.ISearchResultPageDescription;
import org.eclipse.platform.discovery.compatibility.internal.readers.impl.SearchResultPageParser;
import org.eclipse.platform.discovery.core.api.IContributedAction;
import org.eclipse.platform.discovery.core.api.ISearchContext;
import org.eclipse.platform.discovery.ui.api.ISearchConsoleCustomization;
import org.eclipse.platform.discovery.ui.api.ISearchResultCustomUiCreator;
import org.eclipse.search.ui.ISearchResult;
import org.eclipse.search.ui.ISearchResultPage;
import org.eclipse.search.ui.ISearchResultViewPart;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.IPageSite;
public class CompatCustomResultsUiCreator implements ISearchResultCustomUiCreator {
private ISearchResultPage page;
private IPageSite site;
private Label label;
@Override
public Composite createSearchUi(Composite parent, ISearchContext searchContext, FormToolkit formToolkit, Set<IContributedAction> actions,
Set<ISearchConsoleCustomization> viewCustomizations) {
page = getResultPage(searchContext.searchResult().getClass().getName());
parent.setLayout(new GridLayout());
Map<Object, Object> custParams = searchContext.searchParameters().getCustomParameters();
SearchPageToSearchParamsUIAdapter.WokbenchContext ctx = (WokbenchContext) custParams.get(SearchPageToSearchParamsUIAdapter.WORKBENCH_CONTEXT);
site = ctx.pageSite;
site.getActionBars().getMenuManager().add(new Separator("group.viewerSetup"));
site.getActionBars().getMenuManager().add(new Separator("group.properties"));
site.getActionBars().getMenuManager().add(new Separator("group.filtering"));
page.setViewPart(adapter(ctx.viewPart));
try {
page.init(ctx.pageSite);
} catch (PartInitException e) {
throw new RuntimeException(e);
}
Composite result = formToolkit.createComposite(parent);
GridDataFactory.defaultsFor(result).grab(true, true).applyTo(result);
result.setLayout(new GridLayout());
label = formToolkit.createLabel(result, page.getLabel());
GridDataFactory.defaultsFor(label).grab(true, false).applyTo(label);
page.createControl(result);
page.setInput((ISearchResult) searchContext.searchResult(), null);
label.setText(page.getLabel());
site.getActionBars().updateActionBars();
return result;
}
private ISearchResultPage getResultPage(String resultClassName) {
SearchResultPageParser parser = new SearchResultPageParser(Platform.getExtensionRegistry());
for(ISearchResultPageDescription desc: parser.readContributions()) {
if(resultClassName.equals(desc.getSearchResultClassName())) {
return desc.getPage();
}
}
throw new RuntimeException("not found");
}
@Override
public void registerResultSelectionChangedListener(ISelectionChangedListener selChangedListener) {
}
@Override
public Object restoreData() {
return new Object();
}
@Override
public void restore(Object data) {
}
private ISearchResultViewPart adapter(final IViewPart part) {
return new ISearchResultViewPart() {
@Override
public Object getAdapter(@SuppressWarnings("rawtypes") Class adapter) {
return part.getAdapter(adapter);
}
@Override
public void setFocus() {
part.setFocus();
}
@Override
public void removePropertyListener(IPropertyListener listener) {
part.removePropertyListener(listener);
}
@Override
public String getTitleToolTip() {
return part.getTitleToolTip();
}
@Override
public Image getTitleImage() {
return part.getTitleImage();
}
@Override
public String getTitle() {
return part.getTitle();
}
@Override
public IWorkbenchPartSite getSite() {
return part.getSite();
}
@Override
public void dispose() {
part.dispose();
}
@Override
public void createPartControl(Composite parent) {
part.createPartControl(parent);
}
@Override
public void addPropertyListener(IPropertyListener listener) {
part.addPropertyListener(listener);
}
@Override
public void saveState(IMemento memento) {
part.saveState(memento);
}
@Override
public void init(IViewSite site, IMemento memento) throws PartInitException {
part.init(site, memento);
}
@Override
public void init(IViewSite site) throws PartInitException {
part.init(site);
}
@Override
public IViewSite getViewSite() {
return part.getViewSite();
}
@Override
public void updateLabel() {
// label.setText(page.getLabel());
}
@Override
public ISearchResultPage getActivePage() {
return page;
}
@Override
public void fillContextMenu(IMenuManager menuManager) {
//TODO
}
};
}
@Override
public void dispose() {
if(site!=null) {
IActionBars bars = site.getActionBars();
bars.getMenuManager().removeAll();
bars.getMenuManager().update(true);
bars.getToolBarManager().removeAll();
bars.getToolBarManager().update(true);
bars.updateActionBars();
}
page.dispose();
}
}