001/* 002 * Copyright (c) 2012, 2015, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016package org.javamoney.moneta.spi.loader; 017 018import java.util.Map; 019import java.util.logging.Level; 020import java.util.logging.Logger; 021 022public class LoadDataLoaderService { 023 024 private static final Logger LOG = Logger.getLogger(DefaultLoaderListener.class.getName()); 025 026 private final DefaultLoaderListener listener; 027 028 LoadDataLoaderService(DefaultLoaderListener listener) { 029 this.listener = listener; 030 } 031 032 public boolean execute(String resourceId, 033 Map<String, LoadableResource> resources) { 034 035 LoadableResource load = resources.get(resourceId); 036 if (load!=null) { 037 try { 038 if (load.load()) { 039 LOG.log(Level.INFO, "Read data from: " + load.getRemoteResources()); 040 listener.trigger(resourceId, load.getDataStream()); 041 LOG.log(Level.INFO, "New data successfully loaded from: " + load.getRemoteResources()); 042 return true; 043 } 044 } catch (Exception e) { 045 LOG.log(Level.WARNING, "Failed to read/load resource (checking fallback): " + resourceId, 046 e); 047 } 048 try { 049 if (load.loadFallback()) { 050 LOG.log(Level.WARNING, "Read fallback data from: " + load.getFallbackResource()); 051 listener.trigger(resourceId, load.getDataStream()); 052 LOG.log(Level.WARNING, "Loaded fallback data from: " + load.getFallbackResource()); 053 return true; 054 } 055 } catch (Exception e) { 056 LOG.log(Level.SEVERE, "Failed to read/load fallback resource: " + resourceId, 057 e); 058 } 059 } else { 060 throw new IllegalArgumentException("No such resource: " 061 + resourceId); 062 } 063 return false; 064 } 065 066 @Override 067 public String toString() { 068 return LoadDataLoaderService.class.getName() + '{' + " listener: " + listener + '}'; 069 } 070 071}