blob: 4d3ff8e48afa1d4a60a0b69dd0f972321e29f94f [file] [log] [blame]
package org.eclipse.platform.discovery.compatibility.internal.contributors.impl;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IContributor;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.platform.discovery.compatibility.internal.contributors.ContributionFailedException;
import org.eclipse.platform.discovery.compatibility.internal.contributors.IDynamicRegistryContributor;
import org.eclipse.platform.discovery.compatibility.internal.contributors.impl.results.CompatCustomResultsUiCreator;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
import org.eclipse.platform.discovery.runtime.internal.xp.IContributionsReader;
import org.eclipse.platform.discovery.ui.internal.xp.impl.CustomResultUiXpParser;
import org.w3c.dom.Element;
public class DynamicCustomResultUiContributor extends BasicRegistryContributor implements IDynamicRegistryContributor{
private final IContributionsReader<ISearchProviderDescription> parser;
private final IdCalculator idCalculator;
public DynamicCustomResultUiContributor(IContributionsReader<ISearchProviderDescription> providersParser) {
this.parser = providersParser;
this.idCalculator = new IdCalculator();
}
@Override
public void contribute(IExtensionRegistry registry, IContributor contributor, Object token) throws ContributionFailedException {
List<String> failed = new ArrayList<String>();
for(ISearchProviderDescription providerDescription: parser.readContributions()) {
if(idCalculator.isCompatibilitySearchProvider(providerDescription)) {
String compatProviderId = providerDescription.getId();
Element pluginElement = createPluginSnippet(CustomResultUiXpParser.XP_ID);
Element contributorElement = pluginElement.getOwnerDocument().createElement(CustomResultUiXpParser.XP_ELEMENT_NAME);
contributorElement.setAttribute(CustomResultUiXpParser.ID_ATTR_NAME, idCalculator.calculateSearchResultUiId(idCalculator.calculateSearchPageId(compatProviderId)));
contributorElement.setAttribute(CustomResultUiXpParser.SEARCH_PROVIDER_ID_ATTR_NAME, compatProviderId);
contributorElement.setAttribute(CustomResultUiXpParser.UI_CREATOR_CLASS_NAME_ATTR_NAME, CompatCustomResultsUiCreator.class.getName());
addElementToPluginSnippet(pluginElement, contributorElement);
String description = "result Ui contribution for search provider"+compatProviderId;
if(!writeToRegistry(pluginElement, registry, contributor, token, description)) {
failed.add(description);
}
}
}
if(!failed.isEmpty()) {
throw new ContributionFailedException(failed.toString());
}
}
}