package org.springframework.roo.addon.web.mvc.i18n.components;
import java.util.List;
import java.util.Locale;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.springframework.roo.shell.Completion;
import org.springframework.roo.shell.Converter;
import org.springframework.roo.shell.MethodTarget;
/**
* {@link Converter} for {@link I18n}.
*
* @author Stefan Schmidt
* @since 1.0
*/
@Component
@Service
public class I18nConverter implements Converter<I18n> {
@Reference
private I18nSupport i18nSupport;
public I18n convertFromText(final String value, final Class<?> requiredType,
final String optionContext) {
if (value.length() == 2) {
return i18nSupport.getLanguage(new Locale(value, "", ""));
// Disabled due to ROO-1584
// } else if (value.length() == 5) {
// String[] split = value.split("_");
// return i18nSupport.getLanguage(new Locale(split[0],
// split[1].toUpperCase(), ""));
}
return null;
}
public boolean getAllPossibleValues(final List<Completion> completions,
final Class<?> requiredType, final String existingData, final String optionContext,
final MethodTarget target) {
for (final I18n i18n : i18nSupport.getSupportedLanguages()) {
final Locale locale = i18n.getLocale();
final StringBuilder localeString = new StringBuilder(locale.getLanguage());
if (locale.getCountry() == null || locale.getCountry().length() > 0) {
localeString.append("_").append(locale.getCountry().toUpperCase());
}
completions.add(new Completion(localeString.toString()));
}
return true;
}
public boolean supports(final Class<?> requiredType, final String optionContext) {
return I18n.class.isAssignableFrom(requiredType);
}
}