Skip to content
This repository was archived by the owner on Jun 27, 2021. It is now read-only.

Commit c13a70b

Browse files
committed
JAVAMONEY-114: Adding support for explicit provider chain .
1 parent d18c6cb commit c13a70b

File tree

1 file changed

+43
-6
lines changed

1 file changed

+43
-6
lines changed

src/main/java/javax/money/DefaultMonetaryCurrenciesSingletonSpi.java

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import javax.money.spi.MonetaryCurrenciesSingletonSpi;
1818
import java.util.ArrayList;
1919
import java.util.Collection;
20-
import java.util.Collections;
2120
import java.util.HashSet;
2221
import java.util.List;
2322
import java.util.Locale;
@@ -40,7 +39,8 @@ final class DefaultMonetaryCurrenciesSingletonSpi implements MonetaryCurrenciesS
4039
@Override
4140
public Set<CurrencyUnit> getCurrencies(CurrencyQuery query) {
4241
Set<CurrencyUnit> result = new HashSet<CurrencyUnit>();
43-
for (CurrencyProviderSpi spi : Bootstrap.getServices(CurrencyProviderSpi.class)) {
42+
List<CurrencyProviderSpi> providers = collectProviders(query);
43+
for (CurrencyProviderSpi spi : providers) {
4444
try {
4545
result.addAll(spi.getCurrencies(query));
4646
} catch (Exception e) {
@@ -52,17 +52,54 @@ public Set<CurrencyUnit> getCurrencies(CurrencyQuery query) {
5252
return result;
5353
}
5454

55+
private List<CurrencyProviderSpi> collectProviders(CurrencyQuery query) {
56+
List<CurrencyProviderSpi> result = new ArrayList<CurrencyProviderSpi>();
57+
if (!query.getProviderNames().isEmpty()) {
58+
for (String providerName : query.getProviderNames()) {
59+
CurrencyProviderSpi provider = getProvider(providerName);
60+
if (provider == null) {
61+
Logger.getLogger(DefaultMonetaryCurrenciesSingletonSpi.class.getName()).warning("No such currenvcy " +
62+
"provider found, ignoring: " + providerName);
63+
} else {
64+
result.add(provider);
65+
}
66+
}
67+
}
68+
else{
69+
for(String providerName:getDefaultProviderChain()){
70+
CurrencyProviderSpi provider = getProvider(providerName);
71+
if (provider == null) {
72+
Logger.getLogger(DefaultMonetaryCurrenciesSingletonSpi.class.getName()).warning("No such currenvcy " +
73+
"provider found, ignoring: " + providerName);
74+
} else {
75+
result.add(provider);
76+
}
77+
}
78+
}
79+
return result;
80+
}
81+
82+
private CurrencyProviderSpi getProvider(String providerName) {
83+
for(CurrencyProviderSpi provider:Bootstrap.getServices(CurrencyProviderSpi.class)){
84+
if(provider.getProviderName().equals(providerName)){
85+
return provider;
86+
}
87+
}
88+
return null;
89+
}
90+
5591
/**
5692
* This default implementation simply returns all providers defined in arbitrary order.
5793
*
5894
* @return the default provider chain, never null.
5995
*/
6096
@Override
6197
public List<String> getDefaultProviderChain() {
62-
List<String> list = new ArrayList<String>();
63-
list.addAll(getProviderNames());
64-
Collections.sort(list);
65-
return list;
98+
List<String> provList = new ArrayList<String>();
99+
for(CurrencyProviderSpi currencyProviderSpi:Bootstrap.getServices(CurrencyProviderSpi.class)){
100+
provList.add(currencyProviderSpi.getProviderName());
101+
}
102+
return provList;
66103
}
67104

68105
/**

0 commit comments

Comments
 (0)