mods.nazu.ncraft.launcher.SubscriptionManager.java Source code

Java tutorial

Introduction

Here is the source code for mods.nazu.ncraft.launcher.SubscriptionManager.java

Source

package mods.nazu.ncraft.launcher;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import com.google.common.io.PatternFilenameFilter;
import com.google.gson.Gson;

/**
 * @author wasche
 * @copyright Wil Asche (wil@asche.us)
 * @license CC BY 3.0
 * @since 5/17/13
 */
public class SubscriptionManager {
    private static final FilenameFilter FILTER_JSON_FILES = new PatternFilenameFilter(".*\\.json");

    public static final String TYPE_CLIENT = "client";
    public static final String TYPE_SERVER = "server";

    private Registry<MCVersion> mcRegistry = new Registry<>();
    private Registry<Mod> modRegistry = new Registry<>();
    private Registry<ModPack> modPackRegistry = new Registry<>();
    private List<Subscription> subscriptions;

    public SubscriptionManager() {
        loadMinecraftVersions();
        loadModPacks();
        loadSubscriptions();
    }

    private void loadMinecraftVersions() {
        File file = new File("minecraft-versions.json");
        if (!file.exists()) {
            // todo: download versions file
            return;
        }

        // todo: check for updated versions file

        try {
            //noinspection unchecked
            Map<String, Map<String, String>> versions = new Gson().fromJson(new FileReader(file), Map.class);
            for (Map.Entry<String, Map<String, String>> entry : versions.entrySet()) {
                mcRegistry.register(new MCVersion(TYPE_CLIENT, entry.getKey(), entry.getValue().get(TYPE_CLIENT)));
                mcRegistry.register(new MCVersion(TYPE_SERVER, entry.getKey(), entry.getValue().get(TYPE_SERVER)));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    private void loadModPacks() {
        File file = new File("packs");
        if (!file.exists() && !file.mkdir()) {
            System.err.println("Unable to create modpacks folder.");
            return;
        }

        File[] files;
        ModPack pack;

        for (File dir : file.listFiles()) {
            files = dir.listFiles(FILTER_JSON_FILES);

            for (File f : files) {
                pack = ModPack.fromFile(f);
                if (null != pack) {
                    modPackRegistry.register(pack);
                    for (Mod mod : pack.getMods()) {
                        modRegistry.register(mod);
                    }
                }
            }
        }
    }

    private void loadSubscriptions() {
        File file = new File("subscriptions");
        if (!file.exists() && !file.mkdir()) {
            System.err.println("Unable to create subscriptions folder.");
            return;
        }

        File[] files = file.listFiles(FILTER_JSON_FILES);
        subscriptions = Lists.newArrayListWithExpectedSize(files.length);
        Subscription sub;

        for (File f : files) {
            sub = Subscription.fromFile(f);
            if (null != sub) {
                subscriptions.add(sub);
            }
        }
    }

    public Collection<Subscription> getSubscriptions() {
        return subscriptions;
    }

    public Registry<ModPack> getModPackRegistry() {
        return modPackRegistry;
    }

    public String getMinecraftUrl(String type, String version) {
        return mcRegistry.get(type, version).url;
    }

    public static class MCVersion implements Versioned {
        private String type;
        private String version;
        private String url;

        public MCVersion(String type, String version, String url) {
            this.type = type;
            this.version = version;
            this.url = url;
        }

        @Override
        public String getName() {
            return type;
        }

        @Override
        public String getVersion() {
            return version;
        }
    }
}