community edition branding
[idea/community.git] / platform / platform-main / src / com / intellij / idea / MainImpl.java
1 package com.intellij.idea;
2
3 import com.intellij.openapi.application.ApplicationNamesInfo;
4 import com.intellij.openapi.application.ConfigImportHelper;
5 import com.intellij.openapi.application.PathManager;
6 import com.intellij.openapi.diagnostic.Logger;
7 import com.intellij.openapi.util.SystemInfo;
8 import com.intellij.ui.AppUIUtil;
9
10 import javax.swing.*;
11
12 @SuppressWarnings({"HardCodedStringLiteral", "UseOfSystemOutOrSystemErr"})
13 public class MainImpl {
14   final static String APPLICATION_NAME = "idea";
15   private static final String LOG_CATEGORY = "#com.intellij.idea.Main";
16   private static boolean runStartupWizard = false;
17
18   private MainImpl() {
19   }
20
21   /**
22    * Is called from PluginManager
23    */
24   protected static void start(final String[] args) {
25     StartupUtil.isHeadless = Main.isHeadless(args);
26     boolean isNewConfigFolder = PathManager.ensureConfigFolderExists(true);
27     if (!StartupUtil.isHeadless && isNewConfigFolder) {
28       runStartupWizard = true;
29       try {
30         if (SystemInfo.isWindowsVista || SystemInfo.isMac) {
31           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
32         }
33       }
34       catch (Exception e) {
35         // ignore
36       }
37       if (ApplicationNamesInfo.getInstance().getLowercaseProductName().equals("idea")) {
38         ConfigImportHelper.importConfigsTo(PathManager.getConfigPath());
39       }
40     }
41
42     if (!StartupUtil.checkStartupPossible()) {   // It uses config folder!
43       System.exit(-1);
44     }
45
46     Logger.setFactory(LoggerFactory.getInstance());
47
48     final Logger LOG = Logger.getInstance(LOG_CATEGORY);
49
50     Runtime.getRuntime().addShutdownHook(new Thread("Shutdown hook - logging") {
51       public void run() {
52         LOG.info(
53           "------------------------------------------------------ IDEA SHUTDOWN ------------------------------------------------------");
54       }
55     });
56     LOG.info("------------------------------------------------------ IDEA STARTED ------------------------------------------------------");
57
58     _main(args);
59   }
60
61   protected static void _main(final String[] args) {
62     // http://weblogs.java.net/blog/shan_man/archive/2005/06/improved_drag_g.html
63     System.setProperty("sun.swing.enableImprovedDragGesture", "");
64     System.setProperty("idea.platform.prefix", "Idea");
65
66     if (!StartupUtil.isHeadless()) {
67       AppUIUtil.updateFrameIcon(JOptionPane.getRootFrame());
68     }
69
70     if (SystemInfo.isWindows && !SystemInfo.isWindows9x) {
71       final Logger LOG = Logger.getInstance(LOG_CATEGORY);
72       try {
73         if (SystemInfo.isAMD64) {
74           System.loadLibrary("focuskiller64");
75         }
76         else {
77           System.loadLibrary("focuskiller");
78         }
79         LOG.info("Using \"FocusKiller\" library to prevent focus stealing.");
80       }
81       catch (Throwable e) {
82         LOG.info("\"FocusKiller\" library not found or there were problems loading it.", e);
83       }
84     }
85
86     startApplication(args);
87   }
88
89   private static void startApplication(final String[] args) {
90     if (runStartupWizard) {
91       StartupUtil.runStartupWizard();
92     }
93     final IdeaApplication app = new IdeaApplication(args);
94     SwingUtilities.invokeLater(new Runnable() {
95       public void run() {
96         app.run();
97       }
98     });
99   }
100 }