blob: 2372ed91b6ac0c1c31b5202d4af682bc8d11a415 [file] [log] [blame]
package org.eclipse.platform.discovery.destprefs.internal.prefpage.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.platform.discovery.destprefs.api.ISearchDestinationConfigurator;
import org.eclipse.platform.discovery.destprefs.internal.xpparser.ISearchDestinationsConfiguratorDescription;
import org.eclipse.platform.discovery.destprefs.internal.xpparser.SearchDestinationsConfiguratorXPParser;
import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
import org.eclipse.platform.discovery.util.internal.ContractChecker;
public class DestinationConfiguratorsPresenter implements IDestinationConfiguratorsPresenter {
private final SearchDestinationsConfiguratorXPParser configuratorParser;
private IDestinationConfiguratorsView view;
private final ISearchProviderConfiguration searchConfig;
private ISearchDestination destination;
private String destinationProviderId;
public DestinationConfiguratorsPresenter(final SearchDestinationsConfiguratorXPParser configuratorParser, final ISearchProviderConfiguration searchConfig) {
this.configuratorParser = configuratorParser;
this.searchConfig = searchConfig;
}
@Override
public void setView(IDestinationConfiguratorsView view) {
ContractChecker.nullCheckParam(view);
this.view = view;
view.setInput(buildInput());
}
private Collection<CategoryDestinationProviderPair> buildInput() {
List<CategoryDestinationProviderPair> result = new ArrayList<CategoryDestinationProviderPair>();
for(ISearchDestinationsConfiguratorDescription desc: configuratorParser.readContributions()) {
IDestinationCategoryDescription category = findCategory(desc.destinationCategoryId());
IDestinationsProviderDescription destinationProvider = findProvider(desc.destinationProviderId(), category);
result.add(new CategoryDestinationProviderPair(category, destinationProvider));
}
return result;
}
private IDestinationsProviderDescription findProvider(String destinationProviderId, IDestinationCategoryDescription category) {
for(IDestinationsProviderDescription provider: searchConfig.getDestinationProvidersForCategory(category)) {
if(provider.getId().equals(destinationProviderId)) {
return provider;
}
}
throw new RuntimeException("cannot find dest provider:"+destinationProviderId);
}
private IDestinationCategoryDescription findCategory(String destinationCategoryId) {
for(IDestinationCategoryDescription category: searchConfig.getDestinationCategories()) {
if(category.getId().equals(destinationCategoryId)) {
return category;
}
}
throw new RuntimeException("cannot find dest category:"+destinationCategoryId);
}
@Override
public void selectionChanged(DestinationConfiguratorSelection selection) {
ContractChecker.nullCheckParam(selection.destProviderId);
destinationProviderId = selection.destProviderId;
destination = selection.destination;
if(destination==null) {
view.setAddEnabled(true);
view.setEditEnabled(false);
view.setRemoveEnabled(false);
view.setTestEnabled(false);
} else{
view.setAddEnabled(true);
view.setEditEnabled(true);
view.setRemoveEnabled(true);
view.setTestEnabled(true);
}
}
@Override
public void addDestination() {
ISearchDestinationsConfiguratorDescription configDescription = getConfigDescription(destinationProviderId);
ISearchDestinationConfigurator<?> configurator = configDescription.createConfigurator();
IStatus result = configurator.createDestination(view.getShell());
view.setStatus(result);
}
private ISearchDestinationsConfiguratorDescription getConfigDescription(String destinationProviderId) {
for(ISearchDestinationsConfiguratorDescription desc: configuratorParser.readContributions()) {
if(desc.destinationProviderId().equals(destinationProviderId)) {
return desc;
}
}
throw new RuntimeException("cannot find destination configurator for dest provider id:"+destinationProviderId);
}
@Override
public void editDestination() {
// TODO Auto-generated method stub
}
@Override
public void removeDestination() {
// TODO Auto-generated method stub
}
@Override
public void testDestination() {
// TODO Auto-generated method stub
}
}