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");
}
}