package jetbrains.mps.ide.httpsupport.nodeaccess.plugin;
/*Generated by MPS */
import jetbrains.mps.ide.httpsupport.runtime.base.HttpRequestHandlerBase;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.model.SNodeReference;
import jetbrains.mps.project.Project;
import jetbrains.mps.ide.httpsupport.manager.plugin.HttpRequest;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
import jetbrains.mps.ide.httpsupport.runtime.base.HttpSupportUtil;
import jetbrains.mps.project.ProjectManager;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;
public class NodeOpener_RequestHandler extends HttpRequestHandlerBase {
private static final List<String> QUERY_PREFIX = ListSequence.fromListAndArray(new ArrayList<String>(), "node");
private final boolean myCorrectRequest;
private final SNodeReference ref;
private final Project project;
public NodeOpener_RequestHandler(HttpRequest request) {
super(request);
boolean correctRequest = true;
{
String ref_serialized = ListSequence.fromList(this.request.getParameterValue("ref")).getElement(0);
if (ref_serialized != null) {
this.ref = PersistenceFacade.getInstance().createNodeReference(ref_serialized);
} else {
correctRequest = false;
this.ref = null;
}
}
{
String project_serialized = ListSequence.fromList(this.request.getParameterValue("project")).getElement(0);
if (project_serialized != null) {
this.project = HttpSupportUtil.getProjectByName(project_serialized);
} else {
this.project = ProjectManager.getInstance().getOpenedProjects().get(0);
}
}
myCorrectRequest = correctRequest;
}
@Override
protected List<String> getQueryPrefix() {
return QUERY_PREFIX;
}
@Override
public boolean canHandle() {
if (!(myCorrectRequest) || !(super.canHandle())) {
return false;
}
return true;
}
@Override
public void handle() throws Exception {
if (this.project != null) {
final SNode node = HandlerUtil.openNode(this.project, this.ref);
if (node != null) {
final Wrappers._T<String> nodePresentation = new Wrappers._T<String>();
this.project.getModelAccess().runReadAction(new Runnable() {
public void run() {
nodePresentation.value = node.getPresentation();
}
});
String text = HandlerUtil.HEADER_RESPONCE + "The requested node has been opened in MPS<br><b>Node</b>: " + nodePresentation.value + " <i>(" + node.getConcept() + ")</i><br><b>Project</b>: " + this.project.getName();
this.request.sendResponse(HttpResponseStatus.OK, "text/html", Unpooled.copiedBuffer(text, CharsetUtil.UTF_8));
} else {
String text = HandlerUtil.HEADER_RESPONCE + "The requested node has not been found<br><b>Node reference</b>: " + this.ref + "<br><b>Project</b>: " + this.project.getName();
HandlerUtil.showNodeNotFoundPopup(this.project, this.ref);
this.request.sendResponse(HttpResponseStatus.OK, "text/html", Unpooled.copiedBuffer(text, CharsetUtil.UTF_8));
}
} else {
String text = HandlerUtil.HEADER_RESPONCE + "No project is available";
HandlerUtil.showNoProjectIsAvailablePopup();
this.request.sendResponse(HttpResponseStatus.OK, "text/html", Unpooled.copiedBuffer(text, CharsetUtil.UTF_8));
}
}
}