Advertisement
Guest User

Untitled

a guest
May 27th, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. package obchallenge;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.sql.Connection;
  6. import java.sql.DriverManager;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10.  
  11. import javax.script.Invocable;
  12. import javax.script.ScriptEngine;
  13. import javax.script.ScriptEngineManager;
  14. import javax.servlet.ServletException;
  15. import javax.servlet.http.HttpServlet;
  16. import javax.servlet.http.HttpServletRequest;
  17. import javax.servlet.http.HttpServletResponse;
  18.  
  19. import org.codehaus.jettison.json.JSONObject;
  20.  
  21. public class EvaluateJavascript extends HttpServlet {
  22.  
  23. private static final long serialVersionUID = 1L;
  24.  
  25. public void doGet(HttpServletRequest request, HttpServletResponse response)
  26. throws ServletException, IOException {
  27. // Output object
  28. JSONObject jsonResponse = new JSONObject();
  29.  
  30. // Parameter retrieving
  31. String sqlChallengeId = request.getParameter("sqlChallengeId");
  32. String incomingScript = request.getParameter("javascriptString");
  33.  
  34. // Connection to database
  35. Connection connection = null;
  36. try {
  37. Class.forName("org.postgresql.Driver");
  38. connection = DriverManager.getConnection("jdbc:postgresql://" + Constants.DB_URL + ":"
  39. + Constants.DB_PORT + "/" + Constants.DB_SID, Constants.DB_USER, Constants.DB_PASSWORD);
  40.  
  41. // Get functionName
  42. String getFunctionNameQuery = "SELECT function_name FROM javascript_challenge WHERE sql_challenge_id = ?";
  43. PreparedStatement statement = connection.prepareStatement(getFunctionNameQuery);
  44. statement.setString(1, sqlChallengeId);
  45. ResultSet resultSet = statement.executeQuery();
  46. resultSet.next();
  47. String functionName = resultSet.getString(1);
  48.  
  49. // Create a script engine manager
  50. ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
  51. ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
  52. Invocable invocable = (Invocable) scriptEngine;
  53. Object object = scriptEngine.get("test");
  54. // "var test = new Object(); test.suma = function Suma(num) { this.num = this.num; var result = num*2; print(result)}";
  55.  
  56. // Evaluate the incomingScript
  57. scriptEngine.eval(incomingScript);
  58.  
  59. // Prepare output parameter
  60. boolean correct = true;
  61.  
  62. // For each test available for that challenge
  63. String getTestParametersQuery = "SELECT input_parameters, output_parameter FROM javascript_expected_results WHERE javascript_challenge_id = ?";
  64. statement = connection.prepareStatement(getTestParametersQuery);
  65. statement.setString(1, sqlChallengeId);
  66. resultSet = statement.executeQuery();
  67. while (resultSet.next()) {
  68. String inputParameters = resultSet.getString(1);
  69. String outputParameter = resultSet.getString(1);
  70.  
  71. // Execute the function with the corresponding parameters
  72. Object outputObject = invocable.invokeMethod(object, functionName,
  73. (Object[]) inputParameters.split(","));
  74. }
  75.  
  76. // Add result to the response
  77. jsonResponse.put("correct", correct);
  78.  
  79. resultSet.close();
  80. statement.close();
  81. } catch (Exception e) {
  82. e.printStackTrace();
  83. } finally {
  84. if (connection != null) {
  85. try {
  86. connection.close();
  87. } catch (SQLException e) {
  88. e.printStackTrace();
  89. }
  90. }
  91. }
  92.  
  93. response.setContentType("application/json");
  94. PrintWriter out = response.getWriter();
  95. out.print(jsonResponse);
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement