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