From be9ebdcad9aa806b2c55c9f61841551e83b30906 Mon Sep 17 00:00:00 2001 From: Antonin Delpeuch Date: Thu, 11 Oct 2018 19:54:56 +0100 Subject: [PATCH] Migrate database extension out of JSONWriter --- .../database/DatabaseImportController.java | 26 ++---- .../database/cmd/ConnectCommand.java | 24 ++--- .../database/cmd/DatabaseCommand.java | 5 +- .../database/cmd/ExecuteQueryCommand.java | 22 +++-- .../database/cmd/SavedConnectionCommand.java | 92 ++++++++----------- .../database/cmd/TestConnectCommand.java | 22 ++--- .../database/cmd/TestQueryCommand.java | 22 +++-- 7 files changed, 96 insertions(+), 117 deletions(-) diff --git a/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java b/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java index e79153c68..1fce41bc7 100644 --- a/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java +++ b/extensions/database/src/com/google/refine/extension/database/DatabaseImportController.java @@ -41,10 +41,11 @@ import javax.servlet.http.HttpServletResponse; import org.json.JSONException; import org.json.JSONObject; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + import com.google.refine.ProjectManager; import com.google.refine.RefineServlet; import com.google.refine.commands.HttpUtilities; @@ -207,30 +208,23 @@ public class DatabaseImportController implements ImportingController { optionObj, exceptions ); -// String exStr = getExceptionString(exceptions); -// logger.info("exceptions::" + exStr); - Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); try { - writer.object(); + writer.writeStartObject(); if (exceptions.size() == 0) { job.project.update(); // update all internal models, indexes, caches, etc. - writer.key("status"); - writer.value("ok"); + writer.writeStringField("status", "ok"); } else { - writer.key("status"); - writer.value("error"); - writer.key("message"); - writer.value(getExceptionString(exceptions)); -// writer.array(); -// writeErrors(writer, exceptions); -// writer.endArray(); + writer.writeStringField("status", "error"); + writer.writeStringField("message", getExceptionString(exceptions)); } - writer.endObject(); + writer.writeEndObject(); } catch (JSONException e) { throw new ServletException(e); } finally { + writer.flush(); + writer.close(); w.flush(); w.close(); } diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java index 014b30930..0ba564b65 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/ConnectCommand.java @@ -37,15 +37,17 @@ import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpStatus; import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + //import com.google.refine.ProjectManager; import com.google.refine.extension.database.DatabaseConfiguration; import com.google.refine.extension.database.DatabaseService; import com.google.refine.extension.database.DatabaseServiceException; import com.google.refine.extension.database.model.DatabaseInfo; +import com.google.refine.util.ParsingUtilities; public class ConnectCommand extends DatabaseCommand { @@ -66,7 +68,7 @@ public class ConnectCommand extends DatabaseCommand { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/json"); Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); ObjectMapper mapperObj = new ObjectMapper(); try { @@ -74,22 +76,20 @@ public class ConnectCommand extends DatabaseCommand { .connect(databaseConfiguration); String databaseInfoString = mapperObj.writeValueAsString(databaseInfo); response.setStatus(HttpStatus.SC_OK); - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("databaseInfo"); - writer.value(databaseInfoString); - - writer.endObject(); + writer.writeStartObject(); + writer.writeStringField("code", "ok"); + writer.writeStringField("databaseInfo", databaseInfoString); + writer.writeEndObject(); } catch (DatabaseServiceException e) { logger.error("ConnectCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); + sendError(HttpStatus.SC_UNAUTHORIZED,response, e); }catch (Exception e) { logger.error("ConnectCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); + sendError(HttpStatus.SC_UNAUTHORIZED,response, e); } finally { - // w.flush(); + writer.flush(); + writer.close(); w.close(); } } catch (Exception e) { diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java index ccd967d95..171dccac1 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/DatabaseCommand.java @@ -33,7 +33,6 @@ import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -82,7 +81,7 @@ public abstract class DatabaseCommand extends Command { * @param e * @throws IOException */ - protected void sendError(int status, HttpServletResponse response, JSONWriter writer, Exception e) + protected void sendError(int status, HttpServletResponse response, Exception e) throws IOException { //logger.info("sendError::{}", writer); @@ -97,7 +96,7 @@ public abstract class DatabaseCommand extends Command { * @param e * @throws IOException */ - protected void sendError(int status, HttpServletResponse response, JSONWriter writer, DatabaseServiceException e) + protected void sendError(int status, HttpServletResponse response, DatabaseServiceException e) throws IOException { String message = ""; diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java index 90a0dd387..888536dac 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/ExecuteQueryCommand.java @@ -37,15 +37,17 @@ import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpStatus; import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + //import com.google.refine.ProjectManager; import com.google.refine.extension.database.DatabaseConfiguration; import com.google.refine.extension.database.DatabaseService; import com.google.refine.extension.database.DatabaseServiceException; import com.google.refine.extension.database.model.DatabaseInfo; +import com.google.refine.util.ParsingUtilities; public class ExecuteQueryCommand extends DatabaseCommand { @@ -69,7 +71,7 @@ public class ExecuteQueryCommand extends DatabaseCommand { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/json"); Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); try { DatabaseInfo databaseInfo = DatabaseService.get(databaseConfiguration.getDatabaseType()) @@ -84,22 +86,22 @@ public class ExecuteQueryCommand extends DatabaseCommand { } - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("QueryResult"); - writer.value(jsonStr); - writer.endObject(); + writer.writeStartObject(); + writer.writeStringField("code", "ok"); + writer.writeStringField("QueryResult", jsonStr); + writer.writeEndObject(); } catch (DatabaseServiceException e) { logger.error("QueryCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST, response, writer, e); + sendError(HttpStatus.SC_BAD_REQUEST, response, e); } catch (Exception e) { logger.error("QueryCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST,response, writer, e); + sendError(HttpStatus.SC_BAD_REQUEST,response, e); } finally { + writer.flush(); + writer.close(); w.close(); } } catch (Exception e) { diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java index 74b3af2ea..0d52e3d77 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/SavedConnectionCommand.java @@ -38,12 +38,14 @@ import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpStatus; import org.json.JSONException; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + import com.google.refine.extension.database.DatabaseConfiguration; import com.google.refine.extension.database.DatabaseUtils; +import com.google.refine.util.ParsingUtilities; public class SavedConnectionCommand extends DatabaseCommand { @@ -120,51 +122,38 @@ public class SavedConnectionCommand extends DatabaseCommand { private void writeSavedConnectionResponse(HttpServletResponse response, DatabaseConfiguration savedConnection) throws IOException, JSONException { Writer w = response.getWriter(); try { - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); - writer.object(); - writer.key(DatabaseUtils.SAVED_CONNECTION_KEY); - writer.array(); + writer.writeStartObject(); + writer.writeArrayFieldStart(DatabaseUtils.SAVED_CONNECTION_KEY); - writer.object(); - writer.key("connectionName"); - writer.value(savedConnection.getConnectionName()); + writer.writeStartObject(); + writer.writeStringField("connectionName", savedConnection.getConnectionName()); - writer.key("databaseType"); - writer.value(savedConnection.getDatabaseType()); + writer.writeStringField("databaseType", savedConnection.getDatabaseType()); - writer.key("databaseHost"); - writer.value(savedConnection.getDatabaseHost()); + writer.writeStringField("databaseHost", savedConnection.getDatabaseHost()); - writer.key("databasePort"); - writer.value(savedConnection.getDatabasePort()); + writer.writeNumberField("databasePort", savedConnection.getDatabasePort()); - writer.key("databaseName"); - writer.value(savedConnection.getDatabaseName()); - - writer.key("databasePassword"); + writer.writeStringField("databaseName", savedConnection.getDatabaseName()); - // String dbPasswd = savedConnection.getDatabasePassword(); if(dbPasswd != null && !dbPasswd.isEmpty()) { dbPasswd = DatabaseUtils.decrypt(savedConnection.getDatabasePassword()); - //logger.info("Decrypted Password::" + dbPasswd); } - writer.value(dbPasswd); - // - - // writer.value(savedConnection.getDatabasePassword()); + writer.writeStringField("databasePassword", dbPasswd); - writer.key("databaseSchema"); - writer.value(savedConnection.getDatabaseSchema()); + writer.writeStringField("databaseSchema", savedConnection.getDatabaseSchema()); - writer.key("databaseUser"); - writer.value(savedConnection.getDatabaseUser()); + writer.writeStringField("databaseUser", savedConnection.getDatabaseUser()); - writer.endObject(); - writer.endArray(); + writer.writeEndObject(); + writer.writeEndArray(); - writer.endObject(); + writer.writeEndObject(); + writer.flush(); + writer.close(); }finally { w.flush(); @@ -183,54 +172,47 @@ public class SavedConnectionCommand extends DatabaseCommand { try { List savedConnections = DatabaseUtils.getSavedConnections(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); - writer.object(); - writer.key(DatabaseUtils.SAVED_CONNECTION_KEY); - writer.array(); + writer.writeStartObject(); + writer.writeArrayFieldStart(DatabaseUtils.SAVED_CONNECTION_KEY); int size = savedConnections.size(); for (int i = 0; i < size; i++) { - writer.object(); + writer.writeStartObject(); DatabaseConfiguration dbConfig = (DatabaseConfiguration) savedConnections.get(i); - writer.key("connectionName"); - writer.value(dbConfig.getConnectionName()); + writer.writeStringField("connectionName", dbConfig.getConnectionName()); - writer.key("databaseType"); - writer.value(dbConfig.getDatabaseType()); + writer.writeStringField("databaseType", dbConfig.getDatabaseType()); - writer.key("databaseHost"); - writer.value(dbConfig.getDatabaseHost()); + writer.writeStringField("databaseHost", dbConfig.getDatabaseHost()); - writer.key("databasePort"); - writer.value(dbConfig.getDatabasePort()); + writer.writeNumberField("databasePort", dbConfig.getDatabasePort()); - writer.key("databaseName"); - writer.value(dbConfig.getDatabaseName()); + writer.writeStringField("databaseName", dbConfig.getDatabaseName()); - writer.key("databasePassword"); String dbPasswd = dbConfig.getDatabasePassword(); if(dbPasswd != null && !dbPasswd.isEmpty()) { dbPasswd = DatabaseUtils.decrypt(dbConfig.getDatabasePassword()); } // writer.value(dbConfig.getDatabasePassword()); - writer.value(dbPasswd); + writer.writeStringField("databasePassword", dbPasswd); - writer.key("databaseSchema"); - writer.value(dbConfig.getDatabaseSchema()); + writer.writeStringField("databaseSchema", dbConfig.getDatabaseSchema()); - writer.key("databaseUser"); - writer.value(dbConfig.getDatabaseUser()); + writer.writeStringField("databaseUser", dbConfig.getDatabaseUser()); - writer.endObject(); + writer.writeEndObject(); } - writer.endArray(); - writer.endObject(); + writer.writeEndArray(); + writer.writeEndObject(); + writer.flush(); + writer.close(); // logger.info("Saved Connection Get Response sent"); } finally { w.flush(); diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java index b4cd0dd0b..78ad4b27b 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/TestConnectCommand.java @@ -36,13 +36,15 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpStatus; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + import com.google.refine.extension.database.DatabaseConfiguration; import com.google.refine.extension.database.DatabaseService; import com.google.refine.extension.database.DatabaseServiceException; +import com.google.refine.util.ParsingUtilities; @@ -69,7 +71,7 @@ public class TestConnectCommand extends DatabaseCommand { response.setHeader("Content-Type", "application/json"); Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); try { @@ -77,20 +79,18 @@ public class TestConnectCommand extends DatabaseCommand { .testConnection(databaseConfiguration); response.setStatus(HttpStatus.SC_OK); - writer.object(); + writer.writeStartObject(); - writer.key("connectionResult"); - writer.value(connectionTestResult); - writer.key("code"); - writer.value("ok"); - writer.endObject(); + writer.writeBooleanField("connectionResult", connectionTestResult); + writer.writeStringField("code", "ok"); + writer.writeEndObject(); } catch (DatabaseServiceException e) { logger.error("TestConnectCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_UNAUTHORIZED,response, writer, e); + sendError(HttpStatus.SC_UNAUTHORIZED,response, e); } finally { - // writer.endObject(); - // w.flush(); + writer.flush(); + writer.close(); w.close(); } } catch (Exception e) { diff --git a/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java b/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java index a728fc1bd..90e42ece4 100644 --- a/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java +++ b/extensions/database/src/com/google/refine/extension/database/cmd/TestQueryCommand.java @@ -37,15 +37,17 @@ import javax.servlet.http.HttpServletResponse; import org.apache.http.HttpStatus; import org.codehaus.jackson.map.ObjectMapper; -import org.json.JSONWriter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.core.JsonGenerator; + //import com.google.refine.ProjectManager; import com.google.refine.extension.database.DatabaseConfiguration; import com.google.refine.extension.database.DatabaseService; import com.google.refine.extension.database.DatabaseServiceException; import com.google.refine.extension.database.model.DatabaseInfo; +import com.google.refine.util.ParsingUtilities; public class TestQueryCommand extends DatabaseCommand { @@ -70,7 +72,7 @@ public class TestQueryCommand extends DatabaseCommand { response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/json"); Writer w = response.getWriter(); - JSONWriter writer = new JSONWriter(w); + JsonGenerator writer = ParsingUtilities.mapper.getFactory().createGenerator(w); try { DatabaseInfo databaseInfo = DatabaseService.get(dbConfig.getDatabaseType()) @@ -83,22 +85,22 @@ public class TestQueryCommand extends DatabaseCommand { logger.debug("TestQueryCommand::Post::Result::{} " ,jsonStr); } - writer.object(); - writer.key("code"); - writer.value("ok"); - writer.key("QueryResult"); - writer.value(jsonStr); - writer.endObject(); + writer.writeStartObject(); + writer.writeStringField("code", "ok"); + writer.writeStringField("QueryResult", jsonStr); + writer.writeEndObject(); } catch (DatabaseServiceException e) { logger.error("TestQueryCommand::Post::DatabaseServiceException::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST, response, writer, e); + sendError(HttpStatus.SC_BAD_REQUEST, response, e); } catch (Exception e) { logger.error("TestQueryCommand::Post::Exception::{}", e); - sendError(HttpStatus.SC_BAD_REQUEST,response, writer, e); + sendError(HttpStatus.SC_BAD_REQUEST,response, e); } finally { + writer.flush(); + writer.close(); w.close(); } } catch (Exception e) {