Java tutorial
/* * Copyright 2013 Christian Robert * * 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 de.perdian.commons.i18n.polyglot; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Locale; import java.util.Map; import org.springframework.context.MessageSource; class PolyglotInvocationHandler implements InvocationHandler { private Locale locale = null; private MessageSource messageSource = null; private Map<Method, PolyglotInvocationInfo> infoMap = null; @Override public Object invoke(Object proxy, Method method, Object[] args) { PolyglotInvocationInfo invocationInfo = this.getInfoMap() == null ? null : this.getInfoMap().get(method); if (invocationInfo == null) { throw new IllegalArgumentException("Cannot find polyglot information for method: " + method); } else { return this.invokeResolveMessage(invocationInfo, args); } } private String invokeResolveMessage(PolyglotInvocationInfo invocationInfo, Object[] args) { return this.getMessageSource().getMessage(invocationInfo.getKey(), args, invocationInfo.getDefaultValue(), this.getLocale()); } // --------------------------------------------------------------------------- // --- Property access methods // ----------------------------------------------- // --------------------------------------------------------------------------- Locale getLocale() { return this.locale; } void setLocale(Locale locale) { this.locale = locale; } MessageSource getMessageSource() { return this.messageSource; } void setMessageSource(MessageSource messageSource) { this.messageSource = messageSource; } Map<Method, PolyglotInvocationInfo> getInfoMap() { return this.infoMap; } void setInfoMap(Map<Method, PolyglotInvocationInfo> infoMap) { this.infoMap = infoMap; } }