Skip to main content
summaryrefslogtreecommitdiffstats
blob: e51ad4ea6230ea8f1648c963d11fad844135fc7e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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.api.ISearchDestinationTester;
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(getConfigDescription(destinationProviderId).createConfigurator().getSearchDestinationTester()!=null);
		}
	}

	@Override
	public void addDestination() {
		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
		ISearchDestinationConfigurator<?> configurator = getConfigDescription(destinationProviderId).createConfigurator();
		IStatus result = configurator.createDestination(view.getShell());
		updateView(result);
	}

	private void updateView(IStatus result) {
		view.setStatus(result);
		if(result.isOK()) {
			view.setInput(buildInput());
		}
	}

	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 <T extends ISearchDestination> void editDestination() {
		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
		ContractChecker.nullCheckField(destination, "destination");
		
		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
		@SuppressWarnings("unchecked") IStatus result = configurator.editDestination(view.getShell(), (T)destination);
		updateView(result);
		
	}

	@Override
	public <T extends ISearchDestination> void removeDestination() {
		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
		ContractChecker.nullCheckField(destination, "destination");
		
		ISearchDestinationConfigurator<T> configurator = getConfigDescription(destinationProviderId).createConfigurator();
		@SuppressWarnings("unchecked") IStatus result = configurator.deleteDestination(view.getShell(), (T)destination);
		updateView(result);		
	}

	@SuppressWarnings("unchecked")
	@Override
	public <T extends ISearchDestination> void testDestination() {
		ContractChecker.nullCheckField(destinationProviderId, "destinationProviderId");
		ContractChecker.nullCheckField(destination, "destination");
		ISearchDestinationTester<T> tester = (ISearchDestinationTester<T>) getConfigDescription(destinationProviderId).createConfigurator().getSearchDestinationTester();
		IStatus result = tester.test(view.getShell(), (T)destination);
		view.setStatus(result);
	}

}

Back to the top