com.publicuhc.pluginframework.translate.YamlControl.java Source code

Java tutorial

Introduction

Here is the source code for com.publicuhc.pluginframework.translate.YamlControl.java

Source

/*
 * YamlControl.java
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2014 Graham Howden <graham_howden1 at yahoo.co.uk>.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package com.publicuhc.pluginframework.translate;

import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import com.publicuhc.pluginframework.util.YamlUtil;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.FileConfiguration;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class YamlControl extends ResourceBundle.Control {

    private final File dataDir;

    @Inject
    public YamlControl(@Named("dataFolder") File dataDir) {
        this.dataDir = dataDir;
    }

    @Override
    public List<String> getFormats(String baseName) {
        Validate.notNull(baseName);
        return Arrays.asList("yml", "java.properties");
    }

    @Override
    public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader,
            boolean reload) throws IllegalAccessException, InstantiationException, IOException {
        Validate.notNull(baseName);
        Validate.notNull(locale);
        Validate.notNull(format);
        Validate.notNull(loader);

        String bundleName = toBundleName(baseName, locale);

        //we only know how to handle yml, if its a properties send to parent method
        if (!format.equals("yml")) {
            return super.newBundle(bundleName, locale, format, loader, reload);
        }

        //get the actual name of the file
        String resourceName = toResourceName(bundleName, format);

        try {
            Optional<FileConfiguration> file = YamlUtil.loadConfigWithDefaults(resourceName, loader, dataDir);

            if (!file.isPresent()) {
                //say we couldn't find it
                return null;
            }

            return new YamlResourceBundle(file.get());

        } catch (InvalidConfigurationException e) {
            throw new InvalidPropertiesFormatException(e);
        }
    }
}