groovesquid.Main.java Source code

Java tutorial

Introduction

Here is the source code for groovesquid.Main.java

Source

/*
 * Copyright (C) 2013 Maino
 * 
 * This work is licensed under the Creative Commons
 * Attribution-NonCommercial-NoDerivs 3.0 Unported License. To view a copy of
 * this license, visit http://creativecommons.org/licenses/by-nc-nd/3.0/ or send
 * a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco,
 * California, 94105, USA.
 * 
 */

package groovesquid;

import com.google.gson.Gson;
import groovesquid.gui.About;
import groovesquid.gui.GUI;
import groovesquid.gui.Settings;
import groovesquid.model.Clients;
import groovesquid.model.Language;
import groovesquid.util.Utils;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import org.apache.commons.io.FileUtils;

/**
 *
 * @author Maino
 */
public class Main {

    private final static Logger log = Logger.getLogger(Main.class.getName());

    private static GUI gui;
    private static Settings settings;
    private static About about;

    private static String version = "0.6.1";
    private static Clients clients = new Clients(new Clients.Client("htmlshark", "20130520", "nuggetsOfBaller"),
            new Clients.Client("jsqueue", "20130520", "chickenFingers"));
    private static Gson gson = new Gson();
    private static File configDir;
    private static Config config;
    private static Map<String, Language> languages;

    public static void main(String[] args) {

        System.setSecurityManager(null);

        log.log(Level.INFO, "Groovesquid v{0} running on {1} {2} ({3}) in {4}",
                new Object[] { version, System.getProperty("java.vm.name"),
                        System.getProperty("java.runtime.version"), System.getProperty("java.vm.vendor"),
                        System.getProperty("java.home") });

        // show gui

        // apple os x
        System.setProperty("apple.laf.useScreenMenuBar", "true");
        System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Groovesquid");
        // antialising
        System.setProperty("awt.useSystemAAFontSettings", "lcd");
        System.setProperty("swing.aatext", "true");
        // flackering bg fix
        System.setProperty("sun.awt.noerasebackground", "true");
        System.setProperty("sun.java2d.noddraw", "true");
        Toolkit.getDefaultToolkit().setDynamicLayout(true);

        try {
            //UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception ex) {
            log.log(Level.SEVERE, null, ex);
        }

        // load languages
        languages = loadLanguages();

        // Load config
        config = loadConfig();

        // GUI
        try {
            gui = (GUI) config.getGuiClass().newInstance();
        } catch (InstantiationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        settings = new Settings();
        about = new About();

        // Update Checker
        new UpdateCheckThread().start();

        // init grooveshark (every 25min)
        new InitThread().start();

    }

    public static GUI getGui() {
        return Main.gui;
    }

    public static void resetGui() {
        gui.dispose();
        try {
            gui = (GUI) config.getGuiClass().newInstance();
        } catch (InstantiationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        gui.initDone();
        about.dispose();
        about = new About();
        settings.dispose();
        settings = new Settings();
    }

    public static Config loadConfig() {
        configDir = new File(Utils.dataDirectory() + File.separator + ".groovesquid");
        if (!configDir.exists()) {
            configDir.mkdir();
        }

        File oldConfigFile = new File("config.json");
        File configFile = new File(configDir + File.separator + "config.json");

        if (oldConfigFile.exists() && !configFile.exists()) {
            try {
                FileUtils.copyFile(oldConfigFile, configFile);
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            oldConfigFile.delete();
        }

        if (configFile.exists()) {
            try {
                Config tempConfig = gson.fromJson(FileUtils.readFileToString(configFile), Config.class);
                if (tempConfig != null) {
                    return tempConfig;
                }
            } catch (Exception ex) {
                configFile.delete();
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return new Config();
    }

    public static void saveConfig() {
        SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() throws Exception {
                File configFile = new File(configDir + File.separator + "config.json");
                try {
                    FileUtils.writeStringToFile(configFile, gson.toJson(config));
                } catch (IOException ex) {
                    log.log(Level.SEVERE, null, ex);
                }
                return null;
            }
        };
        worker.execute();
    }

    public static String getLocaleString(String localeName) {
        Language currentLanguage;
        if (languages.containsKey(config.getLocale())) {
            currentLanguage = languages.get(config.getLocale());
        } else {
            // default language
            currentLanguage = languages.get("en_US");
        }
        if (currentLanguage.getResourceBundle().containsKey(localeName)) {
            return currentLanguage.getResourceBundle().getString(localeName);
        } else if (languages.get("en_US").getResourceBundle().containsKey(localeName)) {
            return languages.get("en_US").getResourceBundle().getString(localeName);
        } else {
            return localeName;
        }
    }

    private static Map<String, Language> loadLanguages() {
        Map<String, Language> hm = new LinkedHashMap<String, Language>();

        try {
            hm.put("en_US", new Language("en_US"));
            hm.put("de_DE", new Language("de_DE"));
            hm.put("fr_FR", new Language("fr_FR"));
            hm.put("es_ES", new Language("es_ES"));
            hm.put("it_IT", new Language("it_IT"));
            hm.put("tr_TR", new Language("tr_TR"));
            hm.put("se_SE", new Language("se_SE"));
            hm.put("ru_RU", new Language("ru_RU"));
            hm.put("pl_PL", new Language("pl_PL"));
            hm.put("nl_BE", new Language("nl_BE"));
            hm.put("sr_LATN_RS", new Language("sr_LATN_RS"));
            hm.put("sr_RS", new Language("sr_RS"));
            hm.put("pt_PT", new Language("pt_PT"));
            hm.put("pt_BR", new Language("pt_BR"));
        } catch (Exception ex) {
            log.log(Level.SEVERE, null, ex);
        }

        return hm;
    }

    public static synchronized Map<String, Language> getLanguages() {
        return languages;
    }

    public static int getLanguageIndex() {
        int i = 0;
        for (String localeString : languages.keySet()) {
            if (Main.getConfig().getLocale().equals(localeString)) {
                return i;
            }
            i++;
        }
        return 0;
    }

    public static synchronized Config getConfig() {
        return config;
    }

    public static String getVersion() {
        return version;
    }

    public static Clients getClients() {
        return clients;
    }

    public static Settings getSettings() {
        return settings;
    }

    public static About getAbout() {
        return about;
    }

}