/************************************************************************************************** * Copyright (c) 2011 Mihail Atanassov. All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 which accompanies this * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html * <p/> * Contributors: Mihail Atanassov - initial API and implementation *************************************************************************************************/ package de.uni_koeln.ub.drc.ui.facades; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * @author Mihail Atanassov (matana) */ public class NLSHelperImpl extends NLSHelper { @Override protected Object getMessagesInternal(final Class<?> clazz) { ClassLoader loader = clazz.getClassLoader(); ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault(), loader); return internalGet(bundle, clazz); } private Object internalGet(final ResourceBundle bundle, final Class<?> clazz) { Object result; try { Constructor<?> constructor = clazz .getDeclaredConstructor((Class<?>[]) null); constructor.setAccessible(true); result = constructor.newInstance((Object[]) null); } catch (final Exception ex) { throw new IllegalStateException(ex.getMessage()); } final Field[] fieldArray = clazz.getDeclaredFields(); for (int i = 0; i < fieldArray.length; i++) { try { int mod = fieldArray[i].getModifiers(); if (String.class.isAssignableFrom(fieldArray[i].getType()) && Modifier.isPublic(mod) && !Modifier.isStatic(mod)) { try { String value = bundle .getString(fieldArray[i].getName()); if (value != null) { fieldArray[i].setAccessible(true); fieldArray[i].set(result, value); } } catch (final MissingResourceException mre) { fieldArray[i].setAccessible(true); fieldArray[i].set(result, ""); //$NON-NLS-1$ mre.printStackTrace(); } } } catch (final Exception ex) { ex.printStackTrace(); } } return result; } }