package jetbrains.mps.plugin;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.util.io.FileUtil;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import java.net.InetAddress;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MPSPluginImpl extends UnicastRemoteObject implements IMPSPlugin {
private static final Logger LOG = LogManager.getLogger(MPSPluginImpl.class);
public MPSPluginImpl() throws RemoteException {
super();
}
private void checkAccess() {
try {
String client = getClientHost();
String localhost = InetAddress.getLocalHost().getHostAddress();
boolean equals = client == null ? localhost == null : client.equals(localhost);
if (equals) return;
System.out.println("localhost is " + localhost);
System.out.println("client is " + client);
System.out.println("access denied");
} catch (Throwable t) {
throw new RuntimeException("Access Denied", t);
}
}
public IProjectHandler getProjectHandler() throws RemoteException {
checkAccess();
ProjectManager projectManager = ProjectManager.getInstance();
if (projectManager.getOpenProjects().length == 0) return null;
return projectManager.getOpenProjects()[0].getComponent(ProjectHandler.class);
}
public IProjectHandler getProjectHandlerFor(String projectPath) throws RemoteException {
if (projectPath == null) {
return null;
}
checkAccess();
ProjectManager projectManager = ProjectManager.getInstance();
for (Project project : projectManager.getOpenProjects()) {
ProjectHandler handler = project.getComponent(ProjectHandler.class);
if (handler != null && FileUtil.pathsEqual(projectPath, project.getBasePath())) {
return handler;
}
}
if (LOG.isDebugEnabled()) {
LOG.debug("Handler for " + projectPath + " not found. Open projects:");
for (Project project : projectManager.getOpenProjects()) {
String ideaProjectPath = project.getBasePath();
ProjectHandler handler = project.getComponent(ProjectHandler.class);
LOG.debug(" " + ideaProjectPath + (handler != null ? " (has handler)" : " (no handler)" ));
}
}
return null;
}
public IIDEAHandler getProjectCreator() throws RemoteException {
checkAccess();
return RMIHandler.getProjectCreator();
}
}