com.cloudera.validation.MessageSourceInterpolator.java Source code

Java tutorial

Introduction

Here is the source code for com.cloudera.validation.MessageSourceInterpolator.java

Source

// Licensed to Cloudera, Inc. under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  Cloudera, Inc. licenses this file
// to you 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 com.cloudera.validation;

import com.google.common.annotations.VisibleForTesting;

import java.util.Locale;
import javax.validation.MessageInterpolator;

import org.springframework.context.MessageSource;
import org.springframework.context.NoSuchMessageException;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;

/**
 * A message interpolator that delegates to the a Spring message source to
 * do the translation.
 */
public class MessageSourceInterpolator extends DelegatingMessageInterpolator {

    private final MessageSource source;

    public MessageSourceInterpolator(MessageInterpolator delegate) {
        super(delegate);
        this.source = messageSource();
    }

    private MessageSource messageSource() {
        ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource();
        bean.setBasename("classpath:schema.validation");
        bean.setDefaultEncoding("UTF-8");
        return bean;
    }

    @Override
    public String doInterpolate(String messageTemplate, Context context) {
        return translate(messageTemplate);
    }

    /**
     * Returns the message from the key.
     * If it is a standard JRSR 303, or hibernate
     * constraint it converts it to our internal keys.
     *
     * @param templateKey the templateKey
     * @return translated string.
     */
    @VisibleForTesting
    String translate(String templateKey) {
        // remove wrapping {..} brackets
        if (templateKey.startsWith("{") && templateKey.endsWith("}")) {
            templateKey = templateKey.substring(1, templateKey.length() - 1);
        }

        try {
            Object[] args = {};
            return source.getMessage(templateKey, args, Locale.getDefault());
        } catch (NoSuchMessageException e) {
            return templateKey;
        }
    }
}