// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.platform; import graphtea.platform.core.BlackBoard; import graphtea.platform.core.exception.ExceptionHandler; import graphtea.platform.extension.Extension; import graphtea.platform.extension.ExtensionClassLoader; import graphtea.platform.extension.ExtensionLoader; import graphtea.platform.plugin.Plugger; import graphtea.platform.preferences.Preferences; import graphtea.platform.preferences.lastsettings.StorableOnExit; import java.io.File; import java.net.URLClassLoader; /** * The Main runner of program * Author: reza */ public class Application implements StorableOnExit { public static final String VERSION = "1.5.4"; public static final String VERSION_NAME = "newrooz"; public static final String WELCOME_URL = "http://graphtheorysoftware.com/v/"+VERSION_NAME; //public static String USER_ID; public static final String APPLICATION_INSTANCE = "GraphTea.main"; public Plugger plugger = null; public static final String POST_INIT_EVENT = "Post Initialization"; /** * @param blackboard The main blackboard * @see graphtea.platform.Application#main(String[]) */ public void run(BlackBoard blackboard) { try { new Preferences(blackboard); GSplash gs = new GSplash(); gs.showMessages(); loadPlugins(); loadExtensions(blackboard); gs.setVisible(false); gs.stopShowing(); blackboard.setData(POST_INIT_EVENT, "Pi"); } catch (Exception e) { ExceptionHandler.catchException(e); } // UI.getGFrame(blackboard).setTitle("GraphTea Graph Editor-1"); } private void loadPlugins() { plugger.plug(); } /** * The default BlackBoard which plugins/extensions are connected to */ public static BlackBoard blackboard; public static BlackBoard getBlackBoard() { return blackboard; } /** * @return The main blackboard * @see graphtea.platform.Application#main(String[]) */ public BlackBoard init() { Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(blackboard)); blackboard = new BlackBoard(); blackboard.setData(APPLICATION_INSTANCE, this); blackboard.setData("SETTINGS", SETTINGS); plugger = new Plugger(blackboard); run(blackboard); return blackboard; } /** * load all extensions from /extensions directory * * @param blackboard The main blackboard */ private void loadExtensions(BlackBoard blackboard) { ExtensionClassLoader.cl = getExtensionsClassLoader(); String path = null; try { path = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParent(); System.out.println(path); } catch (Exception e1) { e1.printStackTrace(); } ExtensionClassLoader e = new ExtensionClassLoader(path + File.separator + "extensions"); for (String c : e.classesData.keySet()) { try { Class s = getExtensionsClassLoader().loadClass(c); Object extension = ExtensionLoader.loadExtension(s); if (extension != null) { SETTINGS.registerSetting(extension, "Extention Options"); ExtensionLoader.handleExtension(blackboard, extension); } } catch (ClassNotFoundException e1) { e1.printStackTrace(); StaticUtils.addExceptiontoLog(e1, blackboard); } } for (File f : e.getUnknownFilesFound()) { Extension extension = ExtensionLoader.loadUnknownExtension(f, blackboard); ExtensionLoader.handleExtension(blackboard, extension); } } private URLClassLoader getExtensionsClassLoader() { return plugger.classLoader; } /** * Runs Application in these steps: * 0- starts GraphTea exception handler, to catch uncaught exceptions<br> * 1- shows a splash on the screen, and redirect System.out to the splash screen<br> * 2- loads plugins which are jar files located in plugins directory<br> * 3- loads extensions which are files located in extensions directory<br> * 4- fires a <code>Application#POST_INIT_EVENT</code> on blackboard<br> * 5- hides the splash screen<br> * * @param args The main function arguments */ public static void main(String[] args) { new Application().init(); } }