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(); | |
} | |
} |