Package org.hibernate.validator.engine.resourceloading

Source Code of org.hibernate.validator.engine.resourceloading.PlatformResourceBundleLocator

// $Id: PlatformResourceBundleLocator.java 19090 2010-03-23 15:22:59Z hardy.ferentschik $
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat, Inc. and/or its affiliates, and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* 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.hibernate.validator.engine.resourceloading;

import java.security.AccessController;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.slf4j.Logger;

import org.hibernate.validator.engine.ResourceBundleMessageInterpolator;
import org.hibernate.validator.util.GetClassLoader;
import org.hibernate.validator.util.LoggerFactory;

/**
* A resource bundle locator, that loads resource bundles by simply
* invoking <code>ResourceBundle.loadBundle(...)</code>.
*
* @author Hardy Ferentschik
* @author Gunnar Morling
*/
public class PlatformResourceBundleLocator implements ResourceBundleLocator {

  private static final Logger log = LoggerFactory.make();
  private String bundleName;

  public PlatformResourceBundleLocator(String bundleName) {
    this.bundleName = bundleName;
  }

  /**
   * Search current thread classloader for the resource bundle. If not found,
   * search validator (this) classloader.
   *
   * @param locale The locale of the bundle to load.
   *
   * @return the resource bundle or <code>null</code> if none is found.
   */
  public ResourceBundle getResourceBundle(Locale locale) {
    ResourceBundle rb = null;
    boolean isSecured = System.getSecurityManager() != null;
    GetClassLoader action = GetClassLoader.fromContext();
    ClassLoader classLoader = isSecured ? AccessController
        .doPrivileged( action ) : action.run();

    if ( classLoader != null ) {
      rb = loadBundle(
          classLoader, locale, bundleName
              + " not found by thread local classloader"
      );
    }
    if ( rb == null ) {
      action = GetClassLoader
          .fromClass( ResourceBundleMessageInterpolator.class );
      classLoader = isSecured ? AccessController.doPrivileged( action )
          : action.run();
      rb = loadBundle(
          classLoader, locale, bundleName
              + " not found by validator classloader"
      );
    }
    if ( log.isDebugEnabled() ) {
      if ( rb != null ) {
        log.debug( bundleName + " found" );
      }
      else {
        log.debug( bundleName + " not found." );
      }
    }
    return rb;
  }

  private ResourceBundle loadBundle(ClassLoader classLoader, Locale locale, String message) {
    ResourceBundle rb = null;
    try {
      rb = ResourceBundle.getBundle(
          bundleName, locale,
          classLoader
      );
    }
    catch ( MissingResourceException e ) {
      log.trace( message );
    }
    return rb;
  }
}
TOP

Related Classes of org.hibernate.validator.engine.resourceloading.PlatformResourceBundleLocator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.