package jetbrains.mps.plugin; /*Generated by MPS */ import jetbrains.mps.logging.Logger; import org.apache.log4j.LogManager; import java.rmi.RemoteException; import java.rmi.Naming; import jetbrains.mps.ide.ThreadUtils; public class MPSPlugin { private static final Logger LOG = Logger.wrap(LogManager.getLogger(MPSPlugin.class)); private static MPSPlugin ourInstance; private IMPSPlugin myPlugin = null; private boolean myMessageShown = false; private MPSPlugin() { } public IProjectHandler getProjectHandler(String projectPath) { try { IMPSPlugin plugin = getPlugin(); if (plugin == null) { return null; } return plugin.getProjectHandlerFor(projectPath); } catch (RemoteException e) { return null; } } public boolean isIDEAPresent() { MPSPlugin.assertNotInEDT(); try { IMPSPlugin plugin = getPlugin(); if (plugin == null) { return false; } IIDEAHandler handler = plugin.getProjectCreator(); if (handler == null) { return false; } handler.ping(); return true; } catch (RemoteException e) { return false; } } public boolean openConnectionPresent() { MPSPlugin.assertNotInEDT(); if (myPlugin == null) { return false; } try { IIDEAHandler handler = myPlugin.getProjectCreator(); if (handler != null) { handler.ping(); } } catch (RemoteException e) { myPlugin = null; } return myPlugin != null; } private IMPSPlugin getPlugin() { try { myPlugin = (IMPSPlugin) Naming.lookup("//localhost:2390/MPSPlugin"); } catch (Exception e) { if (!(myMessageShown)) { myMessageShown = true; LOG.info("Wasn't able to connect to IDEA"); } } return myPlugin; } public static MPSPlugin getInstance() { if (ourInstance == null) { ourInstance = new MPSPlugin(); } return ourInstance; } private static void assertNotInEDT() { LOG.assertLog(!(ThreadUtils.isInEDT()), "You should not do this in EDT"); } }