From e729ea901d532613520e87eb257e26f878e7c75c Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Fri, 11 May 2012 16:34:53 +1000 Subject: [PATCH] WIP extradata - refactor code, remove from client app --- .../org/mifosng/ui/CommonRestOperations.java | 10 - .../mifosng/ui/CommonRestOperationsImpl.java | 78 +---- .../ui/extradata/ExtraDataController.java | 67 ---- ...etchydata-0.90.js => stretchydata-0.91.js} | 3 +- .../main/webapp/WEB-INF/views/common-head.jsp | 2 +- .../ReadExtraDataAndReportingService.java | 17 + .../ReadExtraDataAndReportingServiceImpl.java | 329 ++++++++++++++++++ .../mifosng/platform/ReadPlatformService.java | 8 - .../platform/ReadPlatformServiceImpl.java | 282 +-------------- .../platform/api/ExtraDataApiResource.java | 26 +- .../platform/rest/ExtraDataResource.java | 128 ------- .../rest/FlexibleReportingResource.java | 113 ------ 12 files changed, 356 insertions(+), 707 deletions(-) delete mode 100644 mifosng-individual-lending-app/src/main/java/org/mifosng/ui/extradata/ExtraDataController.java rename mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/{stretchydata-0.90.js => stretchydata-0.91.js} (99%) create mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java create mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java delete mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/rest/ExtraDataResource.java delete mode 100644 mifosng-provider/src/main/java/org/mifosng/platform/rest/FlexibleReportingResource.java diff --git a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperations.java b/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperations.java index 4f3223e46..c8867af62 100644 --- a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperations.java +++ b/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperations.java @@ -9,7 +9,6 @@ import org.mifosng.data.ClientDataWithAccountsData; import org.mifosng.data.CurrencyData; import org.mifosng.data.EntityIdentifier; import org.mifosng.data.EnumOptionReadModel; -import org.mifosng.data.ExtraDatasets; import org.mifosng.data.LoanAccountData; import org.mifosng.data.LoanProductData; import org.mifosng.data.LoanRepaymentData; @@ -161,15 +160,6 @@ public interface CommonRestOperations { LoanAccountData retrieveLoanAccount(Long loanId); - ExtraDatasets retrieveExtraDatasets(String datasetType); - - GenericResultset retrieveExtraData(String datasetType, String datasetName, - String datasetPKValue); - - @SuppressWarnings("rawtypes") - EntityIdentifier saveExtraData(String datasetType, String datasetName, - String datasetPKValue, Map map); - GenericResultset retrieveReportingData(String rptDB, String name, String type, Map extractedQueryParams); NewLoanWorkflowStepOneData retrieveNewLoanApplicationDetails(Long clientId, Long productId); diff --git a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperationsImpl.java b/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperationsImpl.java index 1dad7cafe..4ac3de662 100644 --- a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperationsImpl.java +++ b/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/CommonRestOperationsImpl.java @@ -20,7 +20,6 @@ import org.mifosng.data.EnumOptionList; import org.mifosng.data.EnumOptionReadModel; import org.mifosng.data.ErrorResponse; import org.mifosng.data.ErrorResponseList; -import org.mifosng.data.ExtraDatasets; import org.mifosng.data.LoanAccountData; import org.mifosng.data.LoanProductData; import org.mifosng.data.LoanProductList; @@ -53,8 +52,6 @@ import org.mifosng.data.command.UpdateOrganisationCurrencyCommand; import org.mifosng.data.command.UserCommand; import org.mifosng.data.reports.GenericResultset; import org.mifosng.ui.loanproduct.ClientValidationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; @@ -71,9 +68,6 @@ import com.thoughtworks.xstream.XStream; @Service(value="commonRestOperations") public class CommonRestOperationsImpl implements CommonRestOperations { - - private final static Logger logger = LoggerFactory - .getLogger(CommonRestOperationsImpl.class); private OAuthRestTemplate oauthRestServiceTemplate; private final ApplicationConfigurationService applicationConfigurationService; @@ -1247,80 +1241,10 @@ public class CommonRestOperationsImpl implements CommonRestOperations { } - @Override - public ExtraDatasets retrieveExtraDatasets(String datasetType) { - logger.info("In CommonRestOperationsImpl - retrieveExtraDatasets"); - try { - URI restUri = URI.create(getBaseServerUrl().concat("api/protected/extradata/datasets/").concat(encodeURIComponent(datasetType))); - - ResponseEntity s = this.oauthRestServiceTemplate - .exchange(restUri, HttpMethod.GET, emptyRequest(), ExtraDatasets.class); - return s.getBody(); - } catch (HttpStatusCodeException e) { - logger.info(e.toString()); - ErrorResponseList errorList = parseErrors(e); - throw new ClientValidationException(errorList.getErrors()); - } - } - @Override - public GenericResultset retrieveExtraData(String datasetType, String datasetName, - String datasetPKValue) { - try { - URI restUri = URI.create(getBaseServerUrl().concat("api/protected/extradata/").concat(encodeURIComponent(datasetType)).concat("/").concat(encodeURIComponent(datasetName)) - .concat("/").concat(encodeURIComponent(datasetPKValue)) - ); - - - ResponseEntity s = this.oauthRestServiceTemplate - .exchange(restUri, HttpMethod.GET, emptyRequest(), - GenericResultset.class); - - return s.getBody(); - } catch (HttpStatusCodeException e) { - ErrorResponseList errorList = parseErrors(e); - throw new ClientValidationException(errorList.getErrors()); - } - } - @SuppressWarnings("rawtypes") - @Override - public EntityIdentifier saveExtraData(String datasetType, String datasetName, String datasetPKValue, Map requestMap) { - - String UrlString = getBaseServerUrl().concat("api/protected/extradata/").concat(encodeURIComponent(datasetType)).concat("/").concat(encodeURIComponent(datasetName)) - .concat("/").concat(encodeURIComponent(datasetPKValue)); - - String value; - boolean firstParameter = true; - for (Object key : requestMap.keySet()) { - if (firstParameter) { - UrlString += "?"; - firstParameter = false; - } - else { - UrlString += "&"; - } - - String[] valueArray = (String[]) requestMap.get(key); - value = valueArray[0]; - if (value == null || value.equals("")) { - value = ""; - } - UrlString += encodeURIComponent(key.toString()) + "=" + encodeURIComponent(value); - } - logger.info("Url: " + UrlString); - - try { - URI restUri = URI.create(UrlString); - ResponseEntity s = this.oauthRestServiceTemplate.postForEntity(restUri, emptyRequest(), EntityIdentifier.class); - return s.getBody(); - } catch (HttpStatusCodeException e) { - ErrorResponseList errorList = parseErrors(e); - throw new ClientValidationException(errorList.getErrors()); - } - } - + //jpw prob remove after private static String encodeURIComponent(String component) { String result = null; diff --git a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/extradata/ExtraDataController.java b/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/extradata/ExtraDataController.java deleted file mode 100644 index 13e831ba5..000000000 --- a/mifosng-individual-lending-app/src/main/java/org/mifosng/ui/extradata/ExtraDataController.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.mifosng.ui.extradata; - -import java.util.Collection; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.mifosng.data.EntityIdentifier; -import org.mifosng.data.ErrorResponse; -import org.mifosng.data.ExtraDatasets; -import org.mifosng.data.reports.GenericResultset; -import org.mifosng.ui.CommonRestOperations; -import org.mifosng.ui.loanproduct.ClientValidationException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -public class ExtraDataController { - - private final CommonRestOperations commonRestOperations; - - @Autowired - public ExtraDataController(final CommonRestOperations commonRestOperations) { - this.commonRestOperations = commonRestOperations; - } - - @ExceptionHandler(AccessDeniedException.class) - public String accessDeniedException() { - return "unAuthorizedAction"; - } - - @ExceptionHandler(ClientValidationException.class) - public @ResponseBody Collection validationException(ClientValidationException ex, HttpServletResponse response) { - - response.setStatus(HttpServletResponse.SC_BAD_REQUEST); - response.setContentType("application/json"); - - return ex.getValidationErrors(); - } - - - @RequestMapping(consumes="application/json", produces="application/json", value = "/extradata/datasets/{datasetType}", method = RequestMethod.GET) - public @ResponseBody ExtraDatasets retrieveExtraDatasets(@PathVariable("datasetType") String datasetType) { - - return this.commonRestOperations.retrieveExtraDatasets(datasetType); - } - - @RequestMapping(consumes="application/json", produces="application/json", value = "/extradata/{datasetType}/{datasetName}/{datasetPKValue}", method = RequestMethod.GET) - public @ResponseBody GenericResultset viewExtraData(@PathVariable("datasetType") String datasetType, @PathVariable("datasetName") String datasetName, @PathVariable("datasetPKValue") String datasetPKValue) { - - return this.commonRestOperations.retrieveExtraData(datasetType, datasetName, datasetPKValue); - } - - @RequestMapping(produces="application/json", value = "/extradata/{datasetType}/{datasetName}/{datasetPKValue}", method = RequestMethod.POST) - @ResponseStatus(HttpStatus.OK) - public @ResponseBody EntityIdentifier saveExtraData(HttpServletRequest request, @PathVariable("datasetType") String datasetType,@PathVariable("datasetName") String datasetName, @PathVariable("datasetPKValue") String datasetPKValue) { - return this.commonRestOperations.saveExtraData(datasetType, datasetName, datasetPKValue, request.getParameterMap()); - } -} \ No newline at end of file diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.90.js b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.91.js similarity index 99% rename from mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.90.js rename to mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.91.js index faba70cc5..3afe8d2d7 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.90.js +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.91.js @@ -378,9 +378,8 @@ $(this).attr("selected", "selected"); }); - //var form_data = $('#entityform').serialize(); var form_data = JSON.stringify($('#entityform').serializeObject()); - console.log(form_data); + //console.log(form_data); var jqxhr = $.ajax({ url : url, type : 'POST', diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/common-head.jsp b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/common-head.jsp index d8fa30f5f..e99506153 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/common-head.jsp +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/views/common-head.jsp @@ -34,7 +34,7 @@ - + diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java new file mode 100644 index 000000000..4b68e3055 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java @@ -0,0 +1,17 @@ +package org.mifosng.platform; + +import java.util.Map; + +import org.mifosng.data.ExtraDatasets; +import org.mifosng.data.reports.GenericResultset; + +public interface ReadExtraDataAndReportingService { + + ExtraDatasets retrieveExtraDatasetNames(String datasetType); + + GenericResultset retrieveExtraData(String datasetType, String datasetName, + String datasetPKValue); + + void tempSaveExtraData(String datasetType, String datasetName, + String datasetPKValue, Map queryParams); +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java new file mode 100644 index 000000000..4f1da3f88 --- /dev/null +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java @@ -0,0 +1,329 @@ +package org.mifosng.platform; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.sql.DataSource; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; + +import org.mifosng.data.ExtraDatasetRow; +import org.mifosng.data.ExtraDatasets; +import org.mifosng.data.reports.GenericResultset; +import org.mifosng.data.reports.ResultsetColumnHeader; +import org.mifosng.data.reports.ResultsetDataRow; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ReadExtraDataAndReportingServiceImpl implements ReadExtraDataAndReportingService { + + private final static Logger logger = LoggerFactory + .getLogger(ReadExtraDataAndReportingServiceImpl.class); + + private final DataSource dataSource; + + @Autowired + public ReadExtraDataAndReportingServiceImpl(final DataSource dataSource) { + this.dataSource = dataSource; + } + + @Override + public ExtraDatasets retrieveExtraDatasetNames(String type) { + + List extraDatasetRows = new ArrayList(); + Connection db_connection; + try { + db_connection = dataSource.getConnection(); + Statement db_statement = db_connection.createStatement(); + + String whereClause; + if (type == null) { + whereClause = ""; + } 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 " + + whereClause + " order by d.`name`"; + + ResultSet rs = db_statement.executeQuery(sql); + + while (rs.next()) { + extraDatasetRows.add(new ExtraDatasetRow(rs.getInt("id"), rs.getString("datasetName"), rs.getString("datasetType"))); + } + + db_statement.close(); + db_statement = null; + db_connection.close(); + db_connection = null; + } catch (SQLException e) { + logger.info(": Failed in retrieveExtraDatasetNames"); + throw new WebApplicationException(Response + .status(Status.BAD_REQUEST).entity(e.getMessage()).build()); + } + + return new ExtraDatasets(extraDatasetRows); + } + + @Override + public GenericResultset retrieveExtraData(String datasetType, + String datasetName, String datasetPKValue) { + + if (datasetType == null) { + logger.info("Extra Data Table Type not Found"); + return null; + } + if (datasetName == null) { + logger.info("Extra Data Table Name not Found"); + return null; + } + if (datasetPKValue == null) { + logger.info("Extra Data Table ID not Found"); + return null; + } + + long startTime = System.currentTimeMillis(); + logger.info("STARTING EXTRA DATA TABLE: " + datasetName + " ID: " + + datasetPKValue); + + try { + GenericResultset result = fillExtraDataGenericResultSet( + datasetType, datasetName, datasetPKValue); + + long elapsed = System.currentTimeMillis() - startTime; + logger.info("FINISHING EXTRA DATA TABLE: " + datasetName + + " Elapsed Time: " + elapsed); + return result; + } catch (SQLException e) { + logger.info("Error - SQL: " + e.toString()); + throw new InvalidSqlException(e, e.toString()); + } + } + + private GenericResultset fillExtraDataGenericResultSet(String datasetType, + String datasetName, String datasetPKValue) throws SQLException { + + GenericResultset result = new GenericResultset(); + String fullDatasetName = getFullDatasetName(datasetType, datasetName); + 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"; + + //logger.info("specific: " + sql); + ResultSet rsmd = db_statement1.executeQuery(sql); + + List columnHeaders = new ArrayList(); + Boolean firstColumn = true; + Integer allowedListId; + String selectFieldList = ""; + String selectFieldSeparator = ""; + while (rsmd.next()) { + ResultsetColumnHeader rsch = new ResultsetColumnHeader(); + rsch.setColumnName(rsmd.getString("name")); + + if (firstColumn) { + selectFieldSeparator = " "; + firstColumn = false; + } else { + selectFieldSeparator = ", "; + } + selectFieldList += selectFieldSeparator + "`" + rsch.getColumnName() + "`"; + + rsch.setColumnType(rsmd.getString("data_type")); + rsch.setColumnLength(rsmd.getInt("data_length")); + rsch.setColumnDisplayType(rsmd.getString("display_type")); + allowedListId = rsmd.getInt("allowed_list_id"); + if (allowedListId != null) { + sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = " + allowedListId + " order by id"; + ResultSet rsValues = db_statement2.executeQuery(sql); + while (rsValues.next()) { + rsch.getColumnValues().add(rsValues.getString("name")); + } + } + columnHeaders.add(rsch); + } + result.setColumnHeaders(columnHeaders); + + sql = "select " + selectFieldList + " from `" + fullDatasetName + + "` where id = " + datasetPKValue; + + ResultSet rs = db_statement3.executeQuery(sql); + String columnName = null; + String columnValue = null; + List resultsetDataRows = new ArrayList(); + ResultsetDataRow resultsetDataRow; + while (rs.next()) { + resultsetDataRow = new ResultsetDataRow(); + List columnValues = new ArrayList(); + + for (int i = 0; i < columnHeaders.size(); i++) { + columnName = columnHeaders.get(i).getColumnName(); + columnValue = rs.getString(columnName); + columnValues.add(columnValue); + } + resultsetDataRow.setRow(columnValues); + resultsetDataRows.add(resultsetDataRow); + } + result.setData(resultsetDataRows); + + db_statement1.close(); + db_statement1 = null; + db_statement2.close(); + db_statement2 = null; + db_statement3.close(); + db_statement3 = null; + db_connection.close(); + db_connection = null; + + return result; + + } + + private String getFullDatasetName(final String datasetType, + final String datasetName) { + return datasetType + "_extra_" + datasetName; + } + + static String replace(String str, String pattern, String replace) { + int s = 0; + int e = 0; + StringBuffer result = new StringBuffer(); + + while ((e = str.indexOf(pattern, s)) >= 0) { + result.append(str.substring(s, e)); + result.append(replace); + s = e + pattern.length(); + } + result.append(str.substring(s)); + return result.toString(); + } + + @Override + public void tempSaveExtraData(String datasetType, String datasetName, + String datasetPKValue, Map queryParams) { + logger.info("SaveExtraData - DatasetType: " + datasetType + + " DatasetName: " + datasetName + " datasetPKValue: " + + datasetPKValue); + + logger.info("startjpw: "); + Set keys = queryParams.keySet(); + String pValue = ""; + for (String key : keys) { + pValue = queryParams.get(key); + logger.info("jpw: " + key + " - " + pValue); + } + + logger.info("endjpw: "); + + + String fullDatasetName = getFullDatasetName(datasetType, datasetName); + String saveSql = getSaveSql(fullDatasetName, datasetPKValue, + queryParams); + try { + Connection db_connection = dataSource.getConnection(); + Statement db_statement = db_connection.createStatement(); + db_statement.executeUpdate(saveSql); + + db_statement.close(); + db_statement = null; + db_connection.close(); + db_connection = null; + } catch (SQLException e) { + logger.info("SQL: " + saveSql + " ERROR: " + e.toString()); + throw new InvalidSqlException(e, e.toString()); + } + + } + + private String getSaveSql(String fullDatasetName, String datasetPKValue, + Map queryParams) { + + String errMsg = ""; + String transType = queryParams.get("ed_transType"); + if (!(transType.equals("E") || transType.equals("A"))) { + errMsg = "transType not E or A - Value is: " + transType; + logger.info(errMsg); + throw new WebApplicationException(Response + .status(Status.BAD_REQUEST).entity(errMsg).build()); + } + + String pValue = ""; + String pValueWrite = ""; + String saveSql = ""; + String singleQuote = "'"; + String underscore = "_"; + String space = " "; + Set keys = queryParams.keySet(); + + if (transType.equals("E")) { + boolean firstColumn = true; + saveSql = "update `" + fullDatasetName + "` "; + + for (String key : keys) { + if (!(key.equals("ed_transType") || key.equals("id"))) { + if (firstColumn) { + saveSql += " set "; + firstColumn = false; + } else { + saveSql += ", "; + } + + pValue = queryParams.get(key); + if (pValue == null || pValue.equals("")) { + pValueWrite = "null"; + } else { + pValueWrite = singleQuote + + replace(pValue, singleQuote, singleQuote + + singleQuote) + singleQuote; + } + saveSql += "`" + replace(key, underscore, space) + "` = " + + pValueWrite; + } + } + + saveSql += " where id = " + datasetPKValue; + } else { + String insertColumns = ""; + String selectColumns = ""; + String columnName = ""; + for (String key : keys) { + pValue = queryParams.get(key); + if (!(key.equals("ed_transType") || key.equals("id"))) { + + pValue = queryParams.get(key); + if (pValue == null || pValue.equals("")) { + pValueWrite = "null"; + } else { + pValueWrite = singleQuote + + replace(pValue, singleQuote, singleQuote + + singleQuote) + singleQuote; + } + columnName = "`" + replace(key, underscore, space) + "`"; + insertColumns += ", " + columnName; + selectColumns += "," + pValueWrite + " as " + columnName; + } + } + + saveSql = "insert into `" + fullDatasetName + "` (id" + + insertColumns + ")" + " select " + datasetPKValue + + " as id" + selectColumns; + } + //logger.info("Save SQL: " + saveSql); + return saveSql; + } +} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformService.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformService.java index 575880640..c2659fd0e 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformService.java @@ -9,7 +9,6 @@ import org.mifosng.data.ClientData; import org.mifosng.data.ClientDataWithAccountsData; import org.mifosng.data.CurrencyData; import org.mifosng.data.EnumOptionReadModel; -import org.mifosng.data.ExtraDatasets; import org.mifosng.data.LoanAccountData; import org.mifosng.data.LoanProductData; import org.mifosng.data.LoanRepaymentData; @@ -92,11 +91,4 @@ public interface ReadPlatformService { NoteData retrieveClientNote(Long clientId, Long noteId); - ExtraDatasets retrieveExtraDatasetNames(String datasetType); - - GenericResultset retrieveExtraData(String datasetType, String datasetName, - String datasetPKValue); - - void tempSaveExtraData(String datasetType, String datasetName, - String datasetPKValue, Map queryParams); } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformServiceImpl.java index 124ed23d6..c92113ecd 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadPlatformServiceImpl.java @@ -33,8 +33,6 @@ import org.mifosng.data.ClientDataWithAccountsData; import org.mifosng.data.CurrencyData; import org.mifosng.data.DerivedLoanData; import org.mifosng.data.EnumOptionReadModel; -import org.mifosng.data.ExtraDatasetRow; -import org.mifosng.data.ExtraDatasets; import org.mifosng.data.LoanAccountData; import org.mifosng.data.LoanProductData; import org.mifosng.data.LoanRepaymentData; @@ -1275,167 +1273,6 @@ public class ReadPlatformServiceImpl implements ReadPlatformService { return result; } - @Override - public ExtraDatasets retrieveExtraDatasetNames(String type) { - - List extraDatasetRows = new ArrayList(); - Connection db_connection; - try { - db_connection = dataSource.getConnection(); - Statement db_statement = db_connection.createStatement(); - - String whereClause; - if (type == null) { - whereClause = ""; - } 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 " - + whereClause + " order by d.`name`"; - - ResultSet rs = db_statement.executeQuery(sql); - - while (rs.next()) { - extraDatasetRows.add(new ExtraDatasetRow(rs.getInt("id"), rs.getString("datasetName"), rs.getString("datasetType"))); - } - - db_statement.close(); - db_statement = null; - db_connection.close(); - db_connection = null; - } catch (SQLException e) { - logger.info(": Failed in retrieveExtraDatasetNames"); - throw new WebApplicationException(Response - .status(Status.BAD_REQUEST).entity(e.getMessage()).build()); - } - - return new ExtraDatasets(extraDatasetRows); - } - - @Override - public GenericResultset retrieveExtraData(String datasetType, - String datasetName, String datasetPKValue) { - - if (datasetType == null) { - logger.info("Extra Data Table Type not Found"); - return null; - } - if (datasetName == null) { - logger.info("Extra Data Table Name not Found"); - return null; - } - if (datasetPKValue == null) { - logger.info("Extra Data Table ID not Found"); - return null; - } - - long startTime = System.currentTimeMillis(); - logger.info("STARTING EXTRA DATA TABLE: " + datasetName + " ID: " - + datasetPKValue); - - try { - GenericResultset result = fillExtraDataGenericResultSet( - datasetType, datasetName, datasetPKValue); - - long elapsed = System.currentTimeMillis() - startTime; - logger.info("FINISHING EXTRA DATA TABLE: " + datasetName - + " Elapsed Time: " + elapsed); - return result; - } catch (SQLException e) { - logger.info("Error - SQL: " + e.toString()); - throw new InvalidSqlException(e, e.toString()); - } - } - - private GenericResultset fillExtraDataGenericResultSet(String datasetType, - String datasetName, String datasetPKValue) throws SQLException { - - GenericResultset result = new GenericResultset(); - String fullDatasetName = getFullDatasetName(datasetType, datasetName); - 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"; - - //logger.info("specific: " + sql); - ResultSet rsmd = db_statement1.executeQuery(sql); - - List columnHeaders = new ArrayList(); - Boolean firstColumn = true; - Integer allowedListId; - String selectFieldList = ""; - String selectFieldSeparator = ""; - while (rsmd.next()) { - ResultsetColumnHeader rsch = new ResultsetColumnHeader(); - rsch.setColumnName(rsmd.getString("name")); - - if (firstColumn) { - selectFieldSeparator = " "; - firstColumn = false; - } else { - selectFieldSeparator = ", "; - } - selectFieldList += selectFieldSeparator + "`" + rsch.getColumnName() + "`"; - - rsch.setColumnType(rsmd.getString("data_type")); - rsch.setColumnLength(rsmd.getInt("data_length")); - rsch.setColumnDisplayType(rsmd.getString("display_type")); - allowedListId = rsmd.getInt("allowed_list_id"); - if (allowedListId != null) { - sql = "select v.`name` from stretchydata_allowed_value v where allowed_list_id = " + allowedListId + " order by id"; - ResultSet rsValues = db_statement2.executeQuery(sql); - while (rsValues.next()) { - rsch.getColumnValues().add(rsValues.getString("name")); - } - } - columnHeaders.add(rsch); - } - result.setColumnHeaders(columnHeaders); - - sql = "select " + selectFieldList + " from `" + fullDatasetName - + "` where id = " + datasetPKValue; - - ResultSet rs = db_statement3.executeQuery(sql); - String columnName = null; - String columnValue = null; - List resultsetDataRows = new ArrayList(); - ResultsetDataRow resultsetDataRow; - while (rs.next()) { - resultsetDataRow = new ResultsetDataRow(); - List columnValues = new ArrayList(); - - for (int i = 0; i < columnHeaders.size(); i++) { - columnName = columnHeaders.get(i).getColumnName(); - columnValue = rs.getString(columnName); - columnValues.add(columnValue); - } - resultsetDataRow.setRow(columnValues); - resultsetDataRows.add(resultsetDataRow); - } - result.setData(resultsetDataRows); - - db_statement1.close(); - db_statement1 = null; - db_statement2.close(); - db_statement2 = null; - db_statement3.close(); - db_statement3 = null; - db_connection.close(); - db_connection = null; - - return result; - - } - - private String getFullDatasetName(final String datasetType, - final String datasetName) { - return datasetType + "_extra_" + datasetName; - } private GenericResultset fillReportingGenericResultSet(final String sql) throws SQLException { @@ -1592,121 +1429,6 @@ public class ReadPlatformServiceImpl implements ReadPlatformService { result.append(str.substring(s)); return result.toString(); } - - @Override - public void tempSaveExtraData(String datasetType, String datasetName, - String datasetPKValue, Map queryParams) { - logger.info("SaveExtraData - DatasetType: " + datasetType - + " DatasetName: " + datasetName + " datasetPKValue: " - + datasetPKValue); - - logger.info("startjpw: "); - Set keys = queryParams.keySet(); - String pValue = ""; - for (String key : keys) { - pValue = queryParams.get(key); - logger.info("jpw: " + key + " - " + pValue); - } - - logger.info("endjpw: "); - - - - - - String fullDatasetName = getFullDatasetName(datasetType, datasetName); - String saveSql = getSaveSql(fullDatasetName, datasetPKValue, - queryParams); - try { - Connection db_connection = dataSource.getConnection(); - Statement db_statement = db_connection.createStatement(); - db_statement.executeUpdate(saveSql); - - db_statement.close(); - db_statement = null; - db_connection.close(); - db_connection = null; - } catch (SQLException e) { - logger.info("SQL: " + saveSql + " ERROR: " + e.toString()); - throw new InvalidSqlException(e, e.toString()); - } - - } - - private String getSaveSql(String fullDatasetName, String datasetPKValue, - Map queryParams) { - - String errMsg = ""; - String transType = queryParams.get("ed_transType"); - if (!(transType.equals("E") || transType.equals("A"))) { - errMsg = "transType not E or A - Value is: " + transType; - logger.info(errMsg); - throw new WebApplicationException(Response - .status(Status.BAD_REQUEST).entity(errMsg).build()); - } - - String pValue = ""; - String pValueWrite = ""; - String saveSql = ""; - String singleQuote = "'"; - String underscore = "_"; - String space = " "; - Set keys = queryParams.keySet(); - - if (transType.equals("E")) { - boolean firstColumn = true; - saveSql = "update `" + fullDatasetName + "` "; - - for (String key : keys) { - if (!(key.equals("ed_transType") || key.equals("id"))) { - if (firstColumn) { - saveSql += " set "; - firstColumn = false; - } else { - saveSql += ", "; - } - - pValue = queryParams.get(key); - if (pValue == null || pValue.equals("")) { - pValueWrite = "null"; - } else { - pValueWrite = singleQuote - + replace(pValue, singleQuote, singleQuote - + singleQuote) + singleQuote; - } - saveSql += "`" + replace(key, underscore, space) + "` = " - + pValueWrite; - } - } - - saveSql += " where id = " + datasetPKValue; - } else { - String insertColumns = ""; - String selectColumns = ""; - String columnName = ""; - for (String key : keys) { - pValue = queryParams.get(key); - if (!(key.equals("ed_transType") || key.equals("id"))) { - - pValue = queryParams.get(key); - if (pValue == null || pValue.equals("")) { - pValueWrite = "null"; - } else { - pValueWrite = singleQuote - + replace(pValue, singleQuote, singleQuote - + singleQuote) + singleQuote; - } - columnName = "`" + replace(key, underscore, space) + "`"; - insertColumns += ", " + columnName; - selectColumns += "," + pValueWrite + " as " + columnName; - } - } - - saveSql = "insert into `" + fullDatasetName + "` (id" - + insertColumns + ")" + " select " + datasetPKValue - + " as id" + selectColumns; - } - //logger.info("Save SQL: " + saveSql); - return saveSql; - } + + } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/ExtraDataApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/ExtraDataApiResource.java index 3687c3a16..12dc5fd9b 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/ExtraDataApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/ExtraDataApiResource.java @@ -1,15 +1,10 @@ package org.mifosng.platform.api; -import java.io.IOException; import java.util.ArrayList; -import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -33,7 +28,7 @@ import org.mifosng.data.ErrorResponseList; import org.mifosng.data.ExtraDatasets; import org.mifosng.data.reports.GenericResultset; import org.mifosng.platform.InvalidSqlException; -import org.mifosng.platform.ReadPlatformService; +import org.mifosng.platform.ReadExtraDataAndReportingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -47,18 +42,7 @@ public class ExtraDataApiResource { private final static Logger logger = LoggerFactory.getLogger(ExtraDataApiResource.class); @Autowired - private ReadPlatformService readPlatformService; - -// @GET -// @Path("{dataSetPrefix}") -// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) -// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) -// public Response extraDataNames(@PathParam("dataSetPrefix") final String dataSetPrefix) { -// -// List result = this.readPlatformService.retrieveExtraDataTableNames(dataSetPrefix); -// -// return Response.ok().entity(result).build(); -// } + private ReadExtraDataAndReportingService readExtraDataAndReportingService; @GET @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @@ -68,7 +52,7 @@ public class ExtraDataApiResource { MultivaluedMap queryParams = uriInfo.getQueryParameters(); String type = queryParams.getFirst("type"); - ExtraDatasets result = this.readPlatformService.retrieveExtraDatasetNames(type); + ExtraDatasets result = this.readExtraDataAndReportingService.retrieveExtraDatasetNames(type); return Response.ok().entity(result).build(); } @@ -79,7 +63,7 @@ public class ExtraDataApiResource { public Response extraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) { try { - GenericResultset result = this.readPlatformService.retrieveExtraData(datasetType, datasetName, datasetPKValue); + GenericResultset result = this.readExtraDataAndReportingService.retrieveExtraData(datasetType, datasetName, datasetPKValue); return Response.ok().entity(result).build(); } catch (InvalidSqlException e) { @@ -127,7 +111,7 @@ public class ExtraDataApiResource { } - this.readPlatformService.tempSaveExtraData(datasetType, datasetName, datasetPKValue, queryParams); + this.readExtraDataAndReportingService.tempSaveExtraData(datasetType, datasetName, datasetPKValue, queryParams); EntityIdentifier entityIdentifier = new EntityIdentifier(Long.valueOf(datasetPKValue)); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/rest/ExtraDataResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/rest/ExtraDataResource.java deleted file mode 100644 index 856c817e5..000000000 --- a/mifosng-provider/src/main/java/org/mifosng/platform/rest/ExtraDataResource.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.mifosng.platform.rest; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.UriInfo; - -import org.mifosng.data.EntityIdentifier; -import org.mifosng.data.ErrorResponse; -import org.mifosng.data.ErrorResponseList; -import org.mifosng.data.ExtraDatasets; -import org.mifosng.data.reports.GenericResultset; -import org.mifosng.platform.InvalidSqlException; -import org.mifosng.platform.ReadPlatformService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -@Path("/protected/extradata") -@Component -@Scope("singleton") -public class ExtraDataResource { - - private final static Logger logger = LoggerFactory - .getLogger(ExtraDataResource.class); - - @Autowired - private ReadPlatformService readPlatformService; - -// @GET -// @Path("{dataSetPrefix}") -// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) -// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) -// public Response extraDataNames(@PathParam("dataSetPrefix") final String dataSetPrefix) { -// -// List result = this.readPlatformService.retrieveExtraDataTableNames(dataSetPrefix); -// -// return Response.ok().entity(result).build(); -// } - - @GET - @Path("datasets/{datasetType}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response datasets(@PathParam("datasetType") final String datasetType, @Context UriInfo uriInfo) { - - //MultivaluedMap queryParams = uriInfo.getQueryParameters(); - //String tableName = queryParams.getFirst("tableName"); - - ExtraDatasets result = this.readPlatformService.retrieveExtraDatasetNames(datasetType); - return Response.ok().entity(result).build(); - } - - @GET - @Path("{datasetType}/{datasetName}/{datasetPKValue}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response extraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) { - - try { - GenericResultset result = this.readPlatformService.retrieveExtraData(datasetType, datasetName, datasetPKValue); - - return Response.ok().entity(result).build(); - } catch (InvalidSqlException e) { - List allErrors = new ArrayList(); - - ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql()); - allErrors.add(err); - - throw new WebApplicationException(Response - .status(Status.BAD_REQUEST) - .entity(new ErrorResponseList(allErrors)).build()); - } - } - - @POST - @Path("{datasetType}/{datasetName}/{datasetPKValue}") - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) - public Response saveExtraData(@PathParam("datasetType") final String datasetType,@PathParam("datasetName") final String datasetName, @PathParam("datasetPKValue") final String datasetPKValue, @Context UriInfo uriInfo) { - - try { - - MultivaluedMap incomingParams = uriInfo.getQueryParameters(); - Map queryParams = new HashMap(); - - Set keys = incomingParams.keySet(); - for (String key : keys) { - String pValue = incomingParams.get(key).get(0); - queryParams.put(key, pValue); - logger.info(key + " - " + pValue); - } - - - this.readPlatformService.tempSaveExtraData(datasetType, datasetName, datasetPKValue, queryParams); - - EntityIdentifier entityIdentifier = new EntityIdentifier(Long.valueOf(datasetPKValue)); - - return Response.ok().entity(entityIdentifier).build(); - } catch (InvalidSqlException e) { - List allErrors = new ArrayList(); - - ErrorResponse err = new ErrorResponse("extradata.invalid.sql", "sql", e.getSql()); - allErrors.add(err); - - throw new WebApplicationException(Response - .status(Status.BAD_REQUEST) - .entity(new ErrorResponseList(allErrors)).build()); - } - } -} \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/rest/FlexibleReportingResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/rest/FlexibleReportingResource.java deleted file mode 100644 index 6b4b089cf..000000000 --- a/mifosng-provider/src/main/java/org/mifosng/platform/rest/FlexibleReportingResource.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.mifosng.platform.rest; - -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import org.mifosng.data.ExtraDatasets; -import org.mifosng.data.reports.GenericResultset; -import org.mifosng.platform.ReadPlatformService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import com.sun.jersey.api.json.JSONWithPadding; - -/** - * TODO - remove open reporting from application - * @deprecated - remove from application - */ -@Deprecated -@Path("/open/reporting") -@Component -@Scope("singleton") -public class FlexibleReportingResource { - - @Autowired - private ReadPlatformService readPlatformService; - - @GET - @Path("flexireportxxx") - @Consumes({ "application/x-javascript" }) - @Produces({ "application/x-javascript" }) - public Response retrieveReport( - @QueryParam("callback") @DefaultValue("callback") final String callbackName, @Context UriInfo uriInfo) { - - MultivaluedMap queryParams = uriInfo.getQueryParameters(); - String rptDB = queryParams.getFirst("MRP_rptDB"); - String name = queryParams.getFirst("MRP_Name"); - String type = queryParams.getFirst("MRP_Type"); - - Map extractedQueryParams = new HashMap(); - - Set keys = queryParams.keySet(); - String pKey; - String pValue; - for (String k : keys) { - - if (k.startsWith("MRP_")) - { - pKey = "${" + k.substring(4) + "}"; - pValue = queryParams.get(k).get(0); - - extractedQueryParams.put(pKey, pValue); - } - } - - GenericResultset result = this.readPlatformService.retrieveGenericResultset(rptDB, name, type, extractedQueryParams); - - JSONWithPadding paddedResult = new JSONWithPadding(result, - callbackName); - - return Response.ok().entity(paddedResult).build(); - } - - - @GET - @Path("extradatanamesxxx") - @Consumes({ "application/x-javascript" }) - @Produces({ "application/x-javascript" }) - public Response extraDataNames( - @QueryParam("callback") @DefaultValue("callback") final String callbackName, @Context UriInfo uriInfo) { - - MultivaluedMap queryParams = uriInfo.getQueryParameters(); - String tableName = queryParams.getFirst("tableName"); - - ExtraDatasets result = this.readPlatformService.retrieveExtraDatasetNames(tableName); - - JSONWithPadding paddedResult = new JSONWithPadding(result, - callbackName); - - return Response.ok().entity(paddedResult).build(); - } - - @GET - @Path("extradataxxx") - @Consumes({ "application/x-javascript" }) - @Produces({ "application/x-javascript" }) - public Response extraData( - @QueryParam("callback") @DefaultValue("callback") final String callbackName, @Context UriInfo uriInfo) { - - MultivaluedMap queryParams = uriInfo.getQueryParameters(); - String extraDataTableName = queryParams.getFirst("extraDataTableName"); - String extraDataTableId = queryParams.getFirst("extraDataTableId"); - - GenericResultset result = this.readPlatformService.retrieveExtraData(extraDataTableName, extraDataTableName, extraDataTableId); - - JSONWithPadding paddedResult = new JSONWithPadding(result, - callbackName); - - return Response.ok().entity(paddedResult).build(); - } -} \ No newline at end of file