WIP Additional Fields API
This commit is contained in:
+169
-1839
File diff suppressed because it is too large
Load Diff
@@ -1,29 +0,0 @@
|
||||
package org.mifosng.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
public class AdditionalFieldSets {
|
||||
|
||||
private List<AdditionalFieldSet> additionalFieldsSets = new ArrayList<AdditionalFieldSet>();
|
||||
|
||||
protected AdditionalFieldSets() {
|
||||
//
|
||||
}
|
||||
|
||||
public AdditionalFieldSets(final List<AdditionalFieldSet> additionalFieldsSets) {
|
||||
this.additionalFieldsSets = additionalFieldsSets;
|
||||
}
|
||||
|
||||
public List<AdditionalFieldSet> getAdditionalFieldsSets() {
|
||||
return additionalFieldsSets;
|
||||
}
|
||||
|
||||
public void setAdditionalFieldsSets(List<AdditionalFieldSet> additionalFieldsSets) {
|
||||
this.additionalFieldsSets = additionalFieldsSets;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -3,16 +3,16 @@ package org.mifosng.data;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
public class AdditionalFieldSet {
|
||||
public class AdditionalFieldsSet {
|
||||
|
||||
private Integer id;
|
||||
private String name;
|
||||
private String type;
|
||||
protected AdditionalFieldSet() {
|
||||
protected AdditionalFieldsSet() {
|
||||
//
|
||||
}
|
||||
|
||||
public AdditionalFieldSet(final Integer id, final String name, final String type) {
|
||||
public AdditionalFieldsSet(final Integer id, final String name, final String type) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.mifosng.data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
public class AdditionalFieldsSets {
|
||||
|
||||
private List<AdditionalFieldsSet> additionalFieldsSets = new ArrayList<AdditionalFieldsSet>();
|
||||
|
||||
protected AdditionalFieldsSets() {
|
||||
//
|
||||
}
|
||||
|
||||
public AdditionalFieldsSets(final List<AdditionalFieldsSet> additionalFieldsSets) {
|
||||
this.additionalFieldsSets = additionalFieldsSets;
|
||||
}
|
||||
|
||||
public List<AdditionalFieldsSet> getAdditionalFieldsSets() {
|
||||
return additionalFieldsSets;
|
||||
}
|
||||
|
||||
public void setAdditionalFieldsSets(List<AdditionalFieldsSet> additionalFieldsSets) {
|
||||
this.additionalFieldsSets = additionalFieldsSets;
|
||||
}
|
||||
|
||||
}
|
||||
+7
-8
@@ -4,7 +4,7 @@ import java.util.Map;
|
||||
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
|
||||
import org.mifosng.data.AdditionalFieldSets;
|
||||
import org.mifosng.data.AdditionalFieldsSets;
|
||||
import org.mifosng.data.reports.GenericResultset;
|
||||
|
||||
public interface ReadExtraDataAndReportingService {
|
||||
@@ -13,14 +13,13 @@ public interface ReadExtraDataAndReportingService {
|
||||
Map<String, String> extractedQueryParams);
|
||||
|
||||
// @PreAuthorize(value = "hasAnyRole('REPORTING_SUPER_USER_ROLE')")
|
||||
GenericResultset retrieveGenericResultset(String name,
|
||||
String type, Map<String, String> extractedQueryParams);
|
||||
GenericResultset retrieveGenericResultset(String name, String type,
|
||||
Map<String, String> extractedQueryParams);
|
||||
|
||||
AdditionalFieldSets retrieveExtraDatasetNames(String datasetType);
|
||||
AdditionalFieldsSets retrieveExtraDatasetNames(String type);
|
||||
|
||||
GenericResultset retrieveExtraData(String datasetType, String datasetName,
|
||||
String datasetPKValue);
|
||||
GenericResultset retrieveExtraData(String type, String set, String id);
|
||||
|
||||
void tempSaveExtraData(String datasetType, String datasetName,
|
||||
String datasetPKValue, Map<String, String> queryParams);
|
||||
void updateExtraData(String type, String set, String id,
|
||||
Map<String, String> queryParams);
|
||||
}
|
||||
+46
-58
@@ -20,8 +20,8 @@ import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
|
||||
import org.mifosng.data.AdditionalFieldSet;
|
||||
import org.mifosng.data.AdditionalFieldSets;
|
||||
import org.mifosng.data.AdditionalFieldsSet;
|
||||
import org.mifosng.data.AdditionalFieldsSets;
|
||||
import org.mifosng.data.reports.GenericResultset;
|
||||
import org.mifosng.data.reports.ResultsetColumnHeader;
|
||||
import org.mifosng.data.reports.ResultsetDataRow;
|
||||
@@ -159,12 +159,12 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
|
||||
String sql;
|
||||
if (name.equals(".")) {
|
||||
sql = "select r.report_id, r.report_name, r.report_type, r.report_subtype, r.report_category," +
|
||||
" rp.parameter_id, rp.report_parameter_name, p.parameter_name" +
|
||||
" from stretchy_report r" +
|
||||
" left join stretchy_report_parameter rp on rp.report_id = r.report_id" +
|
||||
" left join stretchy_parameter p on p.parameter_id = rp.parameter_id" +
|
||||
" order by r.report_name, rp.parameter_id";
|
||||
sql = "select r.report_id, r.report_name, r.report_type, r.report_subtype, r.report_category,"
|
||||
+ " rp.parameter_id, rp.report_parameter_name, p.parameter_name"
|
||||
+ " from stretchy_report r"
|
||||
+ " left join stretchy_report_parameter rp on rp.report_id = r.report_id"
|
||||
+ " left join stretchy_parameter p on p.parameter_id = rp.parameter_id"
|
||||
+ " order by r.report_name, rp.parameter_id";
|
||||
} else {
|
||||
try {
|
||||
sql = getSQLtoRun(name, type, queryParams);
|
||||
@@ -237,8 +237,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
|
||||
private String getSQLtoRun(final String name, final String type,
|
||||
final Map<String, String> queryParams)
|
||||
throws SQLException {
|
||||
final Map<String, String> queryParams) throws SQLException {
|
||||
String sql = null;
|
||||
String rptDB = queryParams.get("${rptDB}");
|
||||
if ((rptDB == null) || rptDB.equals("")) {
|
||||
@@ -334,9 +333,9 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdditionalFieldSets retrieveExtraDatasetNames(String type) {
|
||||
public AdditionalFieldsSets retrieveExtraDatasetNames(String type) {
|
||||
|
||||
List<AdditionalFieldSet> additionalFieldsSets = new ArrayList<AdditionalFieldSet>();
|
||||
List<AdditionalFieldsSet> additionalFieldsSets = new ArrayList<AdditionalFieldsSet>();
|
||||
Connection db_connection;
|
||||
try {
|
||||
db_connection = dataSource.getConnection();
|
||||
@@ -348,16 +347,15 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
} else {
|
||||
whereClause = "where t.`name` = '" + type + "'";
|
||||
}
|
||||
String sql = "select d.id, d.`name` as datasetName, t.`name` as datasetType from stretchydata_dataset d join stretchydata_datasettype t on t.id = d.datasettype_id "
|
||||
String sql = "select d.id, d.`name` as 'set', t.`name` as 'type' from stretchydata_dataset d join stretchydata_datasettype t on t.id = d.datasettype_id "
|
||||
+ whereClause + " order by d.`name`";
|
||||
|
||||
ResultSet rs = db_statement.executeQuery(sql);
|
||||
|
||||
while (rs.next()) {
|
||||
additionalFieldsSets
|
||||
.add(new AdditionalFieldSet(rs.getInt("id"), rs
|
||||
.getString("datasetName"), rs
|
||||
.getString("datasetType")));
|
||||
additionalFieldsSets.add(new AdditionalFieldsSet(rs
|
||||
.getInt("id"), rs.getString("set"), rs
|
||||
.getString("type")));
|
||||
}
|
||||
|
||||
db_statement.close();
|
||||
@@ -370,37 +368,35 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
.status(Status.BAD_REQUEST).entity(e.getMessage()).build());
|
||||
}
|
||||
|
||||
return new AdditionalFieldSets(additionalFieldsSets);
|
||||
return new AdditionalFieldsSets(additionalFieldsSets);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenericResultset retrieveExtraData(String datasetType,
|
||||
String datasetName, String datasetPKValue) {
|
||||
public GenericResultset retrieveExtraData(String type, String set, String id) {
|
||||
|
||||
if (datasetType == null) {
|
||||
logger.info("Extra Data Table Type not Found");
|
||||
if (type == null) {
|
||||
logger.info("Type not Found");
|
||||
return null;
|
||||
}
|
||||
if (datasetName == null) {
|
||||
logger.info("Extra Data Table Name not Found");
|
||||
if (set == null) {
|
||||
logger.info("Set not Found");
|
||||
return null;
|
||||
}
|
||||
if (datasetPKValue == null) {
|
||||
logger.info("Extra Data Table ID not Found");
|
||||
if (id == null) {
|
||||
logger.info("Id not Found");
|
||||
return null;
|
||||
}
|
||||
|
||||
long startTime = System.currentTimeMillis();
|
||||
logger.info("STARTING EXTRA DATA TABLE: " + datasetName + " ID: "
|
||||
+ datasetPKValue);
|
||||
logger.info("STARTING SET: " + set + " ID: " + id);
|
||||
|
||||
try {
|
||||
GenericResultset result = fillExtraDataGenericResultSet(
|
||||
datasetType, datasetName, datasetPKValue);
|
||||
GenericResultset result = fillExtraDataGenericResultSet(type, set,
|
||||
id);
|
||||
|
||||
long elapsed = System.currentTimeMillis() - startTime;
|
||||
logger.info("FINISHING EXTRA DATA TABLE: " + datasetName
|
||||
+ " Elapsed Time: " + elapsed);
|
||||
logger.info("FINISHING SET: " + set + " Elapsed Time: "
|
||||
+ elapsed);
|
||||
return result;
|
||||
} catch (SQLException e) {
|
||||
logger.info("Error - SQL: " + e.toString());
|
||||
@@ -408,22 +404,18 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
private GenericResultset fillExtraDataGenericResultSet(String datasetType,
|
||||
String datasetName, String datasetPKValue) throws SQLException {
|
||||
private GenericResultset fillExtraDataGenericResultSet(String type,
|
||||
String set, String id) throws SQLException {
|
||||
|
||||
GenericResultset result = new GenericResultset();
|
||||
String fullDatasetName = getFullDatasetName(datasetType, datasetName);
|
||||
String fullDatasetName = getFullDatasetName(type, set);
|
||||
Connection db_connection = dataSource.getConnection();
|
||||
Statement db_statement1 = db_connection.createStatement();
|
||||
Statement db_statement2 = db_connection.createStatement();
|
||||
Statement db_statement3 = db_connection.createStatement();
|
||||
String sql = "select f.`name`, f.data_type, f.data_length, f.display_type, f.allowed_list_id from stretchydata_datasettype t join stretchydata_dataset d on d.datasettype_id = t.id join stretchydata_dataset_fields f on f.dataset_id = d.id where d.`name` = '"
|
||||
+ datasetName
|
||||
+ "' and t.`name` = '"
|
||||
+ datasetType
|
||||
+ "' order by f.id";
|
||||
+ set + "' and t.`name` = '" + type + "' order by f.id";
|
||||
|
||||
// logger.info("specific: " + sql);
|
||||
ResultSet rsmd = db_statement1.executeQuery(sql);
|
||||
|
||||
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||
@@ -461,7 +453,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
result.setColumnHeaders(columnHeaders);
|
||||
|
||||
sql = "select " + selectFieldList + " from `" + fullDatasetName
|
||||
+ "` where id = " + datasetPKValue;
|
||||
+ "` where id = " + id;
|
||||
|
||||
ResultSet rs = db_statement3.executeQuery(sql);
|
||||
String columnName = null;
|
||||
@@ -495,9 +487,8 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
|
||||
}
|
||||
|
||||
private String getFullDatasetName(final String datasetType,
|
||||
final String datasetName) {
|
||||
return datasetType + "_extra_" + datasetName;
|
||||
private String getFullDatasetName(final String type, final String set) {
|
||||
return type + "_extra_" + set;
|
||||
}
|
||||
|
||||
private static String replace(String str, String pattern, String replace) {
|
||||
@@ -515,11 +506,10 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tempSaveExtraData(String datasetType, String datasetName,
|
||||
String datasetPKValue, Map<String, String> queryParams) {
|
||||
logger.info("SaveExtraData - DatasetType: " + datasetType
|
||||
+ " DatasetName: " + datasetName + " datasetPKValue: "
|
||||
+ datasetPKValue);
|
||||
public void updateExtraData(String type, String set, String id,
|
||||
Map<String, String> queryParams) {
|
||||
logger.info("updateExtraData - type: " + type + " set: " + set
|
||||
+ " id: " + id);
|
||||
|
||||
logger.info("startjpw: ");
|
||||
Set<String> keys = queryParams.keySet();
|
||||
@@ -531,9 +521,8 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
|
||||
logger.info("endjpw: ");
|
||||
|
||||
String fullDatasetName = getFullDatasetName(datasetType, datasetName);
|
||||
String saveSql = getSaveSql(fullDatasetName, datasetPKValue,
|
||||
queryParams);
|
||||
String fullDatasetName = getFullDatasetName(type, set);
|
||||
String saveSql = getSaveSql(fullDatasetName, id, queryParams);
|
||||
try {
|
||||
Connection db_connection = dataSource.getConnection();
|
||||
Statement db_statement = db_connection.createStatement();
|
||||
@@ -550,7 +539,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
|
||||
}
|
||||
|
||||
private String getSaveSql(String fullDatasetName, String datasetPKValue,
|
||||
private String getSaveSql(String fullSetName, String id,
|
||||
Map<String, String> queryParams) {
|
||||
|
||||
String errMsg = "";
|
||||
@@ -572,7 +561,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
|
||||
if (transType.equals("E")) {
|
||||
boolean firstColumn = true;
|
||||
saveSql = "update `" + fullDatasetName + "` ";
|
||||
saveSql = "update `" + fullSetName + "` ";
|
||||
|
||||
for (String key : keys) {
|
||||
if (!(key.equals("ed_transType") || key.equals("id"))) {
|
||||
@@ -596,7 +585,7 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
saveSql += " where id = " + datasetPKValue;
|
||||
saveSql += " where id = " + id;
|
||||
} else {
|
||||
String insertColumns = "";
|
||||
String selectColumns = "";
|
||||
@@ -619,9 +608,8 @@ public class ReadExtraDataAndReportingServiceImpl implements
|
||||
}
|
||||
}
|
||||
|
||||
saveSql = "insert into `" + fullDatasetName + "` (id"
|
||||
+ insertColumns + ")" + " select " + datasetPKValue
|
||||
+ " as id" + selectColumns;
|
||||
saveSql = "insert into `" + fullSetName + "` (id" + insertColumns
|
||||
+ ")" + " select " + id + " as id" + selectColumns;
|
||||
}
|
||||
// logger.info("Save SQL: " + saveSql);
|
||||
return saveSql;
|
||||
|
||||
+46
-34
@@ -22,10 +22,10 @@ import javax.ws.rs.core.UriInfo;
|
||||
import org.codehaus.jettison.json.JSONArray;
|
||||
import org.codehaus.jettison.json.JSONException;
|
||||
import org.codehaus.jettison.json.JSONObject;
|
||||
import org.mifosng.data.AdditionalFieldsSets;
|
||||
import org.mifosng.data.EntityIdentifier;
|
||||
import org.mifosng.data.ErrorResponse;
|
||||
import org.mifosng.data.ErrorResponseList;
|
||||
import org.mifosng.data.AdditionalFieldSets;
|
||||
import org.mifosng.data.reports.GenericResultset;
|
||||
import org.mifosng.platform.InvalidSqlException;
|
||||
import org.mifosng.platform.ReadExtraDataAndReportingService;
|
||||
@@ -34,42 +34,50 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/additionalfields")
|
||||
@Component
|
||||
@Scope("singleton")
|
||||
public class AdditionalFieldsApiResource {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(AdditionalFieldsApiResource.class);
|
||||
|
||||
private final static Logger logger = LoggerFactory
|
||||
.getLogger(AdditionalFieldsApiResource.class);
|
||||
|
||||
@Autowired
|
||||
private ReadExtraDataAndReportingService readExtraDataAndReportingService;
|
||||
|
||||
@GET
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON})
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
public Response datasets(@Context UriInfo uriInfo) {
|
||||
|
||||
MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters();
|
||||
String type = queryParams.getFirst("type");
|
||||
|
||||
AdditionalFieldSets result = this.readExtraDataAndReportingService.retrieveExtraDatasetNames(type);
|
||||
MultivaluedMap<String, String> queryParams = uriInfo
|
||||
.getQueryParameters();
|
||||
String type = queryParams.getFirst("type");
|
||||
|
||||
AdditionalFieldsSets result = this.readExtraDataAndReportingService
|
||||
.retrieveExtraDatasetNames(type);
|
||||
return Response.ok().entity(result).build();
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("{datasetType}/{datasetName}/{datasetPKValue}")
|
||||
@Path("{type}/{set}/{id}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON})
|
||||
public Response extraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) {
|
||||
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
public Response extraData(@PathParam("type") final String type,
|
||||
@PathParam("set") final String set,
|
||||
@PathParam("id") final String id, @Context UriInfo uriInfo) {
|
||||
|
||||
try {
|
||||
GenericResultset result = this.readExtraDataAndReportingService.retrieveExtraData(datasetType, datasetName, datasetPKValue);
|
||||
|
||||
GenericResultset result = this.readExtraDataAndReportingService
|
||||
.retrieveExtraData(type, set, id);
|
||||
|
||||
return Response.ok().entity(result).build();
|
||||
} catch (InvalidSqlException e) {
|
||||
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
|
||||
ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql());
|
||||
ErrorResponse err = new ErrorResponse("extradata.invalid.sql",
|
||||
"sql", e.getSql());
|
||||
allErrors.add(err);
|
||||
|
||||
throw new WebApplicationException(Response
|
||||
@@ -77,18 +85,20 @@ public class AdditionalFieldsApiResource {
|
||||
.entity(new ErrorResponseList(allErrors)).build());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@POST
|
||||
@Path("{datasetType}/{datasetName}/{datasetPKValue}")
|
||||
@Path("{type}/{set}/{id}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON})
|
||||
public Response saveExtraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, String reqbody) {
|
||||
|
||||
try {
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
public Response saveExtraData(@PathParam("type") final String type,
|
||||
@PathParam("set") final String set,
|
||||
@PathParam("id") final String id, String reqbody) {
|
||||
|
||||
try {
|
||||
|
||||
Map<String, String> queryParams = new HashMap<String, String>();
|
||||
String pValue = "";
|
||||
String pName;
|
||||
String pValue = "";
|
||||
String pName;
|
||||
try {
|
||||
JSONObject jsonObj = new JSONObject(reqbody);
|
||||
JSONArray jsonArr = jsonObj.names();
|
||||
@@ -96,7 +106,7 @@ public class AdditionalFieldsApiResource {
|
||||
for (int i = 0; i < jsonArr.length(); i++) {
|
||||
pName = (String) jsonArr.get(i);
|
||||
pValue = jsonObj.getString(pName);
|
||||
logger.info( pName + " - " + pValue);
|
||||
logger.info(pName + " - " + pValue);
|
||||
queryParams.put(pName, pValue);
|
||||
}
|
||||
} else {
|
||||
@@ -106,20 +116,22 @@ public class AdditionalFieldsApiResource {
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
throw new WebApplicationException(Response
|
||||
.status(Status.BAD_REQUEST)
|
||||
.entity("JSON body is wrong").build());
|
||||
.status(Status.BAD_REQUEST)
|
||||
.entity("JSON body is wrong").build());
|
||||
}
|
||||
|
||||
|
||||
this.readExtraDataAndReportingService.tempSaveExtraData(datasetType, datasetName, datasetPKValue, queryParams);
|
||||
|
||||
EntityIdentifier entityIdentifier = new EntityIdentifier(Long.valueOf(datasetPKValue));
|
||||
|
||||
|
||||
this.readExtraDataAndReportingService.updateExtraData(type, set,
|
||||
id, queryParams);
|
||||
|
||||
EntityIdentifier entityIdentifier = new EntityIdentifier(
|
||||
Long.valueOf(id));
|
||||
|
||||
return Response.ok().entity(entityIdentifier).build();
|
||||
} catch (InvalidSqlException e) {
|
||||
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
|
||||
ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql());
|
||||
ErrorResponse err = new ErrorResponse("extradata.invalid.sql",
|
||||
"sql", e.getSql());
|
||||
allErrors.add(err);
|
||||
|
||||
logger.info("way bad: " + err.toString());
|
||||
|
||||
Reference in New Issue
Block a user