Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package obchallenge;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import javax.script.Invocable;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.codehaus.jettison.json.JSONObject;
- public class EvaluateJavascript extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- // Output object
- JSONObject jsonResponse = new JSONObject();
- // Parameter retrieving
- String sqlChallengeId = request.getParameter("sqlChallengeId");
- String incomingScript = request.getParameter("javascriptString");
- // Connection to database
- Connection connection = null;
- try {
- Class.forName("org.postgresql.Driver");
- connection = DriverManager.getConnection("jdbc:postgresql://" + Constants.DB_URL + ":"
- + Constants.DB_PORT + "/" + Constants.DB_SID, Constants.DB_USER, Constants.DB_PASSWORD);
- // Get functionName
- String getFunctionNameQuery = "SELECT function_name FROM javascript_challenge WHERE sql_challenge_id = ?";
- PreparedStatement statement = connection.prepareStatement(getFunctionNameQuery);
- statement.setString(1, sqlChallengeId);
- ResultSet resultSet = statement.executeQuery();
- resultSet.next();
- String functionName = resultSet.getString(1);
- // Create a script engine manager
- ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
- ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
- Invocable invocable = (Invocable) scriptEngine;
- Object object = scriptEngine.get("test");
- // "var test = new Object(); test.suma = function Suma(num) { this.num = this.num; var result = num*2; print(result)}";
- // Evaluate the incomingScript
- scriptEngine.eval(incomingScript);
- // Prepare output parameter
- boolean correct = true;
- // For each test available for that challenge
- String getTestParametersQuery = "SELECT input_parameters, output_parameter FROM javascript_expected_results WHERE javascript_challenge_id = ?";
- statement = connection.prepareStatement(getTestParametersQuery);
- statement.setString(1, sqlChallengeId);
- resultSet = statement.executeQuery();
- while (resultSet.next()) {
- String inputParameters = resultSet.getString(1);
- String outputParameter = resultSet.getString(1);
- // Execute the function with the corresponding parameters
- Object outputObject = invocable.invokeMethod(object, functionName,
- (Object[]) inputParameters.split(","));
- }
- // Add result to the response
- jsonResponse.put("correct", correct);
- resultSet.close();
- statement.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (connection != null) {
- try {
- connection.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- response.setContentType("application/json");
- PrintWriter out = response.getWriter();
- out.print(jsonResponse);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement