Java tutorial
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; } } }