nz.co.senanque.vaadinsupport.I18n.I18nCaptionHelper.java Source code

Java tutorial

Introduction

Here is the source code for nz.co.senanque.vaadinsupport.I18n.I18nCaptionHelper.java

Source

/*******************************************************************************
 * Copyright (c)2014 Prometheus Consulting
 *
 * 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 nz.co.senanque.vaadinsupport.I18n;

import java.util.Iterator;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.MessageSourceAccessor;

import com.vaadin.ui.AbstractField;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Label;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TabSheet.Tab;

/**
 * Scan the object passed and translate each caption and label value according to the current locale.
 * It uses the Spring MessageSourceAccessor to manage the translation.
 * Note that you don't need this when using Madura Objects, but if you have a form that isn't bound to
 * a Madura Object you can run this against it to translate all the captions.
 * 
 * @author Roger Parkinson
 *
 */
public class I18nCaptionHelper {

    private static Logger logger = LoggerFactory.getLogger(I18nCaptionHelper.class);

    //   public static void setCaptions(Object layout, MessageSourceAccessor messageSourceAccessor)
    //   {
    //      Field[] fields = layout.getClass().getDeclaredFields();
    //      for (Field field: fields)
    //      {
    //         field.setAccessible(true);
    //         Object fieldValue=null;
    //         try {
    //            fieldValue = field.get(layout);
    //         } catch (Exception e) {
    //            logger.warn("Error getting field",e);
    //            continue;
    //         }
    //         if (fieldValue instanceof AbstractField)
    //         {
    //            AbstractField abstractField = (AbstractField)fieldValue;
    //            String caption = abstractField.getCaption();
    //            if (StringUtils.hasLength(caption))
    //            {
    //               caption = messageSourceAccessor.getMessage(caption, null,caption);
    //               if (caption.indexOf('}') == -1)
    //               {
    //                  abstractField.setCaption(caption);
    //               }
    //            }
    //         }
    //         else if (fieldValue instanceof Label)
    //         {
    //            com.vaadin.ui.Label label = (com.vaadin.ui.Label)fieldValue;
    //            Object caption = label.getValue();
    //            if (caption instanceof String && StringUtils.hasLength((String)caption))
    //            {
    //               String captionString = messageSourceAccessor.getMessage((String)caption, null,(String)caption);
    //               if (captionString.indexOf('}') == -1)
    //               {
    //                  label.setValue(captionString);
    //               }
    //            }
    //         }
    //         else if (fieldValue instanceof TabSheet)
    //         {
    //            TabSheet tabsheet = (TabSheet)fieldValue;
    //            int j=0;
    //              for (final Iterator<Component> i = tabsheet.getComponentIterator(); i.hasNext();) {
    //                  final Component component = i.next();
    //                  Tab tab = tabsheet.getTab(j++);
    //                  String caption = tab.getCaption();
    //               caption = messageSourceAccessor.getMessage((String)caption, null,(String)caption);
    //               tab.setCaption(caption);
    //              }
    //         }
    //      }
    //   }

    public static String[] getColumnHeaders(String[] englishColOrder, MessageSourceAccessor messageSourceAccessor) {
        int size = englishColOrder.length;
        String[] ret = new String[size];
        for (int i = 0; i < size; i++) {
            ret[i] = messageSourceAccessor.getMessage(englishColOrder[i], null, englishColOrder[i]);
        }
        return ret;
    }

    public static void switchCaptions(Component component, MessageSourceAccessor messageSourceAccessor) {
        if (component instanceof AbstractField) {
            switchCaption((AbstractField) component, messageSourceAccessor);
        }
        if (component instanceof Label) {
            switchCaption((Label) component, messageSourceAccessor);
        }
        if (component instanceof ComponentContainer) {
            switchCaption((ComponentContainer) component, messageSourceAccessor);
        }
        if (component instanceof TabSheet) {
            switchCaption((TabSheet) component, messageSourceAccessor);
        }
    }

    private static void switchCaption(ComponentContainer componentContainer,
            MessageSourceAccessor messageSourceAccessor) {
        String newCaption = getTranslatedCaption(componentContainer.getCaption(), messageSourceAccessor);
        if (newCaption != null) {
            componentContainer.setCaption(newCaption);
        }
        Iterator<Component> it = componentContainer.getComponentIterator();
        while (it.hasNext()) {
            Component subcomponent = it.next();
            switchCaptions(subcomponent, messageSourceAccessor);
        }
    }

    private static void switchCaption(AbstractField field, MessageSourceAccessor messageSourceAccessor) {
        String newCaption = getTranslatedCaption(field.getCaption(), messageSourceAccessor);
        if (newCaption != null) {
            field.setCaption(newCaption);
        }
    }

    private static void switchCaption(TabSheet tabSheet, MessageSourceAccessor messageSourceAccessor) {
        int j = 0;
        for (final Iterator<Component> i = tabSheet.getComponentIterator(); i.hasNext();) {
            final Component component = i.next();
            Tab tab = tabSheet.getTab(j++);
            String newCaption = getTranslatedCaption(tab.getCaption(), messageSourceAccessor);
            if (newCaption != null) {
                tab.setCaption(newCaption);
            }
        }
    }

    private static void switchCaption(Label label, MessageSourceAccessor messageSourceAccessor) {
        String newCaption = getTranslatedCaption((String) label.getValue(), messageSourceAccessor);
        if (newCaption != null) {
            label.setValue(newCaption);
        }
    }

    public static String getTranslatedCaption(String caption, MessageSourceAccessor messageSourceAccessor) {
        if (caption == null) {
            return null;
        }
        if (caption.indexOf('}') == -1) {
            String newCaption = messageSourceAccessor.getMessage(caption, null, caption);
            if (newCaption.indexOf('}') == -1) {
                return newCaption;
            }
        }
        return null;

    }

}