/* * Copyright (c) 2016 Helmut Neemann * Use of this source code is governed by the GPL v3 license * that can be found in the LICENSE file. */ package de.neemann.gui.language; import com.thoughtworks.xstream.XStream; import de.neemann.digital.XStreamValid; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * */ public class Bundle { private final Map<String, String> languages; private final String name; private final ArrayList<Language> list; private static XStream getxStream() { XStream xStream = new XStreamValid(); xStream.alias("languages", Map.class); xStream.registerConverter(new Resources.MapEntryConverter("string")); return xStream; } /** * Creates a new instance * * @param name the bundles name */ public Bundle(String name) { this.name = name; InputStream in = getClass().getClassLoader().getResourceAsStream(name + ".xml"); XStream xStream = new XStreamValid(); xStream.alias("languages", MyLang.class); xStream.addImplicitCollection(MyLang.class, "lang"); xStream.alias("lang", MyLangEntry.class); xStream.aliasAttribute(MyLangEntry.class, "name", "name"); xStream.aliasAttribute(MyLangEntry.class, "filename", "file"); xStream.aliasAttribute(MyLangEntry.class, "displayName", "display"); MyLang l = (MyLang) xStream.fromXML(in); languages = new HashMap<>(); list = new ArrayList<>(); for (MyLangEntry e : l.lang) { languages.put(e.name, e.displayName); list.add(new Language(e.name, e.displayName, e.filename)); } } /** * returns the resources for the given language * * @param lang the language * @return the resources or null if not available */ public Resources getResources(String lang) { if (!languages.containsKey(lang)) return null; InputStream in = getClass().getClassLoader().getResourceAsStream(name + "_" + lang + ".xml"); if (in == null) return null; return new Resources(in); } /** * Returns all supported languages * * @return the languages */ public List<Language> getSupportedLanguages() { return list; } private static class MyLang { private ArrayList<MyLangEntry> lang; } private static class MyLangEntry { private String name; private String displayName; private String filename; } }