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