/*** * Copyright (c) 2009 Caelum - www.caelum.com.br/opensource All rights reserved. * * 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 br.com.caelum.vraptor.util; import static java.util.Objects.requireNonNull; import java.util.Enumeration; import java.util.MissingResourceException; import java.util.ResourceBundle; import javax.enterprise.inject.Vetoed; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A Resource bundle that doesn't throw exception when there is no resource of given key. * It only returns ??? + key + ??? when the key doesn't exist. * * @author Lucas Cavalcanti * @since 3.0.2 */ @Vetoed public class SafeResourceBundle extends ResourceBundle { private static final Logger logger = LoggerFactory.getLogger(SafeResourceBundle.class); private final ResourceBundle delegate; private final boolean isDefault; public SafeResourceBundle(ResourceBundle delegate) { this(delegate, false); } public SafeResourceBundle(ResourceBundle delegate, boolean isDefault) { requireNonNull(delegate, "Bundle should not be null. Please report it to VRaptor devs."); this.delegate = delegate; this.isDefault = isDefault; } public boolean isDefault() { return isDefault; } @Override public Enumeration<String> getKeys() { return delegate.getKeys(); } @Override protected Object handleGetObject(String key) { try { return delegate.getString(key); } catch (MissingResourceException e) { logger.warn("Resource missed while calling delegate", e); return "???" + key + "???"; } } }