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
|
package org.eclipse.jst.jsf.common.internal.strategy;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jst.jsf.common.internal.policy.IdentifierOrderedIteratorPolicy;
/**
* Will select in order the testable, then extension-point, then default strategies.
* <p>
* Users should use addTestableStrategy(), addExtensionStrategy(), and addDefaultStrategy() and <b>NOT</b> addStrategy()
* <p>
* Users must supply a defaultStrategy at minimum;
* <p>
* @param <INPUT>
* @param <OUTPUT>
*/
public abstract class AbstractTestableExtensibleDefaultProviderSelectionStrategy<INPUT, OUTPUT>
extends
IteratorPolicyBasedStrategyComposite<INPUT, OUTPUT, OUTPUT, String, IIdentifiableStrategy<INPUT, OUTPUT, String>> {
private static final String TEST_STRATEGY_ID = "testInjection"; //$NON-NLS-1$
/**
* LocatorProviderStrategy id for extension-pt
*/
private static final String EXT_PT_STRATEGY_ID = "extensionPointInjection"; //$NON-NLS-1$
/**
* LocatorProviderStrategy id for platform default
*/
private static final String DEFAULT_STRATEGY_ID = "platformDefault"; //$NON-NLS-1$
/**
* Contructor
*/
protected AbstractTestableExtensibleDefaultProviderSelectionStrategy() {
super(new MyIteratorPolicy());
}
@Override
public OUTPUT getNoResult() {
return null;
}
/**
* @param testStrategy
*/
public void addTestableStrategy(final ISimpleStrategy<INPUT, OUTPUT> testStrategy) {
super.addStrategy(new IdententifiableStrategyWrapper(testStrategy, TEST_STRATEGY_ID));
}
/**
* @param extensionStrategy
*/
public void addExtensionStrategy(final ISimpleStrategy<INPUT, OUTPUT> extensionStrategy) {
super.addStrategy(new IdententifiableStrategyWrapper(extensionStrategy, EXT_PT_STRATEGY_ID));
}
/**
* @param defaultStrategy
*/
public void addDefaultStrategy(final ISimpleStrategy<INPUT, OUTPUT> defaultStrategy) {
super.addStrategy(new IdententifiableStrategyWrapper(defaultStrategy, DEFAULT_STRATEGY_ID));
}
private class IdententifiableStrategyWrapper<INPUT, OUTPUT, String> implements IIdentifiableStrategy<INPUT, OUTPUT, String> {
private ISimpleStrategy<INPUT, OUTPUT> _innerStrategy;
private String _id;
IdententifiableStrategyWrapper(final ISimpleStrategy<INPUT, OUTPUT> innerStrategy, final String id) {
_innerStrategy = innerStrategy;
_id = id;
}
public OUTPUT perform(INPUT input) throws Exception {
return _innerStrategy.perform(input);
}
public OUTPUT getNoResult() {
return null;
}
public String getId() {
return _id;
}
public java.lang.String getDisplayName() {
return null;
}
}
private static class MyIteratorPolicy extends
IdentifierOrderedIteratorPolicy<String> {
private static List<String> _selectionOrder;
static {
_selectionOrder = new ArrayList<String>();
_selectionOrder
.add(TEST_STRATEGY_ID);
_selectionOrder
.add(EXT_PT_STRATEGY_ID);
_selectionOrder
.add(DEFAULT_STRATEGY_ID);
}
public MyIteratorPolicy() {
super(_selectionOrder);
setExcludeNonExplicitValues(true);
}
}
}
|