001package fr.aumgn.bukkitutils.command;
002
003import java.io.IOException;
004import java.io.InputStream;
005import java.net.URL;
006import java.net.URLConnection;
007import java.text.MessageFormat;
008import java.util.Locale;
009import java.util.Map;
010
011import org.bukkit.plugin.java.JavaPlugin;
012
013import fr.aumgn.bukkitutils.localization.Localization;
014import fr.aumgn.bukkitutils.localization.loaders.MessagesLoader;
015
016public class CommandsLocalization extends Localization {
017
018    /**
019     * Do not use, only needed for testing purposes !
020     */
021    public CommandsLocalization(Locale locale) {
022        super(null, null, locale, locale);
023    }
024
025    public CommandsLocalization(JavaPlugin plugin, Locale locale) {
026        super(plugin, locale);
027    }
028
029    @Override
030    public CommandsMessages get(String name) {
031        return new CommandsMessages(loadMap(name));
032    }
033
034    @Override
035    protected void load(Map<String, MessageFormat> map, Locale locale,
036            String name) {
037        loadInJar(map, locale, name);
038        super.load(map, locale, name);
039    }
040
041    private void loadInJar(Map<String, MessageFormat> map, Locale locale,
042            String baseName) {
043        for (MessagesLoader loader : Localization.loaders()) {
044            for (String extension : loader.getExtensions()) {
045                String name = baseName + "." + extension;
046
047                InputStream iStream = null;
048                URL res = getClass().getResource(name);
049                if (res != null) {
050                    try {
051                        URLConnection connection = res.openConnection();
052                        connection.setUseCaches(false);
053                        iStream = connection.getInputStream();
054                    } catch (IOException _) {
055                    }
056                }
057
058                if (iStream != null) {
059                    loadStream(map, locale, loader, iStream);
060                    return;
061                }
062            }
063        }
064    }
065}