Skip to content

Commit

Permalink
Fixed Rascal notebook bug
Browse files Browse the repository at this point in the history
  • Loading branch information
maveme committed Nov 25, 2019
1 parent 6bf2723 commit 7ea0816
Showing 1 changed file with 14 additions and 39 deletions.
53 changes: 14 additions & 39 deletions rascal-notebook/src/org/rascalmpl/notebook/RascalNotebook.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package org.rascalmpl.notebook;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
Expand All @@ -25,7 +23,6 @@
import org.rascalmpl.shell.ShellEvaluatorFactory;
import org.rascalmpl.uri.URIUtil;
import org.rascalmpl.values.ValueFactoryFactory;
import org.zeromq.ZMQ.Socket;
import communication.Header;
import entities.ContentExecuteInput;
import entities.ContentStream;
Expand Down Expand Up @@ -75,60 +72,36 @@ public RascalNotebook(String connectionFilePath, String... salixPath ) throws Ex
// -----------------------------------------------------------------
// Methods
// -----------------------------------------------------------------

// @Override
// public void processExecuteRequest(ContentExecuteRequest contentExecuteRequest, Message message) {
// Header parentHeader = message.getParentHeader();
// Map<String, String> metadata = message.getMetadata();
// Map<String, InputStream> data = new HashMap<>();
// String session = message.getHeader().getSession();
//
// data.put("text/html", stringStream("<div>funciona</div>"));
//
// sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.EXECUTE_INPUT), parentHeader, new ContentExecuteInput(contentExecuteRequest.getCode(), executionNumber));
// sendMessage(getCommunication().getShellSocket(), createHeader(session, MessageType.EXECUTE_REPLY), parentHeader, new ContentExecuteReplyOk(executionNumber));
//
// replyRequest(message.getHeader(), session, data, metadata);
// }

private InputStream stringStream(String x) {
return new ByteArrayInputStream(x.getBytes(StandardCharsets.UTF_8));
}

public void replyRequest(Header parentHeader, String session, Map<String, InputStream> data, Map<String, String> metadata) {
InputStream input = data.get("text/html");
Map<String, String> res= new HashMap<>();
Map<String, String> res = new HashMap<>();
res.put("text/html", convertStreamToString(input));
ContentExecuteResult content = new ContentExecuteResult(executionNumber, res, metadata);
sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.EXECUTE_RESULT), parentHeader, content);
}
@Override
public void processExecuteRequest(ContentExecuteRequest contentExecuteRequest, Message message) {
Header parentHeader = message.getParentHeader();
Header header, parentHeader = message.getHeader();
Map<String, String> metadata = message.getMetadata();
Map<String, InputStream> data = new HashMap<>();
String session = message.getHeader().getSession();

if (!contentExecuteRequest.isSilent()) {
if (contentExecuteRequest.isStoreHistory()) {
sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.EXECUTE_INPUT), parentHeader, new ContentExecuteInput(contentExecuteRequest.getCode(), executionNumber));
header = new Header(MessageType.EXECUTE_INPUT, parentHeader);
sendMessage(getCommunication().getIOPubSocket(), header, parentHeader, new ContentExecuteInput(contentExecuteRequest.getCode(), executionNumber));
try {
this.language.handleInput(contentExecuteRequest.getCode(), data, metadata);
this.language.handleInput(contentExecuteRequest.getCode(), data, metadata); // Execute user's code
// Not sure about removing this.
removeUnnecessaryData(data);

sendMessage(getCommunication().getShellSocket(), createHeader(session, MessageType.EXECUTE_REPLY), parentHeader, new ContentExecuteReplyOk(executionNumber));
sendMessage(getCommunication().getShellSocket(), new Header(MessageType.EXECUTE_REPLY, parentHeader), parentHeader, new ContentExecuteReplyOk(executionNumber));

processStreams(parentHeader, data, metadata, session);
// sends the result
processStreams(parentHeader, data, metadata, session); // stdout writing

if(!data.isEmpty())
{
replyRequest(message.getHeader(), session, data, metadata);
// InputStream input = data.get("text/html");
// Map<String, String> res = new HashMap<>();
// res.put("text/html", convertStreamToString(input));
// ContentExecuteResult content = new ContentExecuteResult(executionNumber, res, metadata);
// sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.EXECUTE_RESULT), parentHeader, content);
}
replyRequest(parentHeader, session, data, metadata); // // Returns the result

} catch (InterruptedException e) {
e.printStackTrace();
Expand All @@ -142,7 +115,8 @@ public void processExecuteRequest(ContentExecuteRequest contentExecuteRequest, M
else {
// No broadcast output on the IOPUB channel.
// Don't have an execute_result.
sendMessage(getCommunication().getShellSocket(), createHeader(session, MessageType.EXECUTE_REPLY), parentHeader, new ContentExecuteReplyOk(executionNumber));
header = new Header(MessageType.EXECUTE_REPLY, parentHeader);
sendMessage(getCommunication().getShellSocket(), header, parentHeader, new ContentExecuteReplyOk(executionNumber));
}
}

Expand All @@ -168,7 +142,7 @@ public void processStreamsReply(String stream, Header parentHeader, Map<String,
sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.DISPLAY_DATA), parentHeader, new ContentDisplayData(metadata, metadata, new HashMap<String, String>()));
}
else {
sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.STREAM), parentHeader, new ContentStream(stream, logs));
sendMessage(getCommunication().getIOPubSocket(), createHeader(session, MessageType.STREAM), parentHeader, new ContentStream(stream, stdout.toString()));
}
removeUnnecessaryData(data);
flushStreams();
Expand Down Expand Up @@ -312,6 +286,7 @@ public String replaceLocs2html(String logs){
// Execution
// -----------------------------------------------------------------

@SuppressWarnings("unused")
public static void main(String[] args) {
try {
RascalNotebook a = args.length > 1 ? new RascalNotebook(args[0], args[1]) : new RascalNotebook(args[0]);
Expand Down

0 comments on commit 7ea0816

Please sign in to comment.