/**
* Copyright (c) 2012, 2015, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.javamoney.moneta.internal.convert;
import java.io.InputStream;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.javamoney.moneta.internal.convert.IMFRemoteSearchCallable.IMFRemoteSearchResult;
public enum IMFRemoteSearch {
INSTANCE;
private static final Logger LOG = Logger.getLogger(IMFRemoteSearch.class.getName());
private final ExecutorService executor = Executors.newCachedThreadPool();
public Map<IMFHistoricalType, InputStream> getResources(YearMonth yearMonth) {
Objects.requireNonNull(yearMonth);
Map<IMFHistoricalType, InputStream> map = new EnumMap<>(IMFHistoricalType.class);
try {
List<Future<IMFRemoteSearchResult>> results = new ArrayList<>(2);
for (IMFHistoricalType type : IMFHistoricalType.values()) {
results.add(executor.submit(new IMFRemoteSearchCallable(type,
yearMonth)));
}
for (Future<IMFRemoteSearchResult> result : results) {
IMFRemoteSearchResult imfRemoteSearchResult = result.get();
if (Objects.nonNull(imfRemoteSearchResult)) {
map.put(imfRemoteSearchResult.getType(),
imfRemoteSearchResult.getStream());
}
}
} catch (Exception exception) {
LOG.log(Level.INFO, "Failed to load resource input for find resource from date " + yearMonth, exception);
}
return map;
}
}