| /* |
| * Copyright 2010 Google Inc. |
| * |
| * 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 com.google.gwt.tools.cldr; |
| |
| import com.google.gwt.i18n.server.GwtLocaleFactoryImpl; |
| import com.google.gwt.i18n.shared.GwtLocaleFactory; |
| |
| import com.ibm.icu.dev.tool.UOption; |
| |
| import org.unicode.cldr.util.CLDRPaths; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.lang.reflect.Constructor; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * Generate a country list for each locale, taking into account the literate |
| * population of each country speaking the language. |
| */ |
| public class GenerateGwtCldrData { |
| |
| private static final GwtLocaleFactory factory = new GwtLocaleFactoryImpl(); |
| |
| private static final String DEFAULT_PROCESSORS = "CurrencyDataProcessor," |
| + "DateTimeFormatInfoProcessor,ListFormattingProcessor,LocalizedNamesProcessor"; |
| |
| public static void main(String[] args) throws IOException, SecurityException, |
| NoSuchMethodException, IllegalArgumentException, InstantiationException, |
| IllegalAccessException, InvocationTargetException { |
| System.out.println("Starting to generate from CLDR data (ignore -D lines " |
| + "produced by cldr-tools)"); |
| UOption[] options = { |
| UOption.HELP_H(), UOption.HELP_QUESTION_MARK(), |
| UOption.SOURCEDIR().setDefault(CLDRPaths.MAIN_DIRECTORY), |
| outputDir().setDefault("./"), |
| restrictLocales(), |
| processors().setDefault(DEFAULT_PROCESSORS), |
| }; |
| UOption.parseArgs(args, options); |
| String sourceDir = options[2].value; // SOURCEDIR |
| String targetDir = options[3].value; // outputDir |
| String restrictLocales = options[4].value; // --restrictLocales |
| String procNames = options[5].value; // processors |
| |
| List<Class<? extends Processor>> processorClasses = new ArrayList<Class<? extends Processor>>(); |
| for (String procName : procNames.split(",")) { |
| if (!procName.contains(".")) { |
| procName = Processor.class.getPackage().getName() + "." + procName; |
| } |
| Throwable thrown = null; |
| try { |
| Class<?> clazz = Class.forName(procName); |
| processorClasses.add(clazz.asSubclass(Processor.class)); |
| } catch (ClassNotFoundException e) { |
| thrown = e; |
| } catch (ClassCastException e) { |
| thrown = e; |
| } |
| if (thrown != null) { |
| System.err.println("Ignoring " + procName + " (" + thrown + ")"); |
| } |
| } |
| InputFactory cldrFactory = new InputFactory(sourceDir); |
| List<String> locales = cldrFactory.chooseLocales(restrictLocales); |
| System.out.println("Processing " + locales.size() + " locales"); |
| File outputDir = new File(targetDir); |
| LocaleData localeData = new LocaleData(factory, locales); |
| for (Class<? extends Processor> processorClass : processorClasses) { |
| Constructor<? extends Processor> ctor = |
| processorClass.getConstructor(File.class, InputFactory.class, LocaleData.class); |
| Processor processor = ctor.newInstance(outputDir, cldrFactory, localeData); |
| processor.run(); |
| } |
| System.out.println("Finished."); |
| } |
| |
| private static UOption outputDir() { |
| return UOption.create("outdir", 'o', UOption.REQUIRES_ARG); |
| } |
| |
| private static UOption processors() { |
| return UOption.create("processors", 'p', UOption.REQUIRES_ARG); |
| } |
| |
| private static UOption restrictLocales() { |
| return UOption.create("restrictLocales", 'r', UOption.REQUIRES_ARG); |
| } |
| } |