From e0b3edff8a15f041ccd642535d6d7da8490e309f Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Thu, 30 Aug 2012 17:53:13 +1000 Subject: [PATCH] refactoring additional fields for data scope --- .../ReadWriteNonCoreDataServiceImpl.java | 141 ++++++++++-------- 1 file changed, 76 insertions(+), 65 deletions(-) diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java index 570915102..0a2622971 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/noncore/ReadWriteNonCoreDataServiceImpl.java @@ -8,6 +8,7 @@ import java.util.Set; import javax.sql.rowset.CachedRowSet; +import org.apache.commons.lang.StringUtils; import org.mifosng.platform.api.data.AdditionalFieldsSetData; import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.ResultsetColumnHeader; @@ -94,7 +95,7 @@ public class ReadWriteNonCoreDataServiceImpl implements Long id) { long startTime = System.currentTimeMillis(); - + checkMainResourceExistsWithinScope(type, id); CachedRowSet columnDefinitions = getAdditionalFieldsMetaData(type, set); @@ -106,7 +107,9 @@ public class ReadWriteNonCoreDataServiceImpl implements String selectFieldList = getSelectFieldListFromColumnHeaders(columnHeaders); - String sql = "select " + selectFieldList + " from `" + type + "` t left join `" + getFullDatasetName(type, set) + "` s on s.id = t.id where t.id = " + id; + String sql = "select " + selectFieldList + " from `" + type + + "` t left join `" + getFullDatasetName(type, set) + + "` s on s.id = t.id where t.id = " + id; logger.info("addition fields sql: " + sql); List resultsetDataRows = getResultsetDataRows( @@ -114,7 +117,7 @@ public class ReadWriteNonCoreDataServiceImpl implements long elapsed = System.currentTimeMillis() - startTime; logger.info("FINISHING SET: " + set + " Elapsed Time: " + elapsed); - + return new GenericResultsetData(columnHeaders, resultsetDataRows); } @@ -162,11 +165,14 @@ public class ReadWriteNonCoreDataServiceImpl implements private List getResultsetColumnHeaders( CachedRowSet columnDefinitions, String sqlErrorMsg) { - List columnHeaders = null; + List columnHeaders = new ArrayList(); + ResultsetColumnHeader rschId = new ResultsetColumnHeader(); + rschId.setColumnName("id"); + rschId.setColumnType("Integer"); + columnHeaders.add(rschId); try { - columnHeaders = new ArrayList(); Integer allowedListId; while (columnDefinitions.next()) { ResultsetColumnHeader rsch = new ResultsetColumnHeader(); @@ -249,11 +255,17 @@ public class ReadWriteNonCoreDataServiceImpl implements long startTime = System.currentTimeMillis(); - checkResourceTypeAndSetThere(type, set);// /delete - String fullDatasetName = getFullDatasetName(type, set); - String transType = getTransType(type, fullDatasetName, id); + GenericResultsetData readResultset = retrieveExtraData(type, set, id); - String saveSql = getSaveSql(fullDatasetName, id, transType, queryParams); + String idValue = readResultset.getData().get(0).getRow().get(0); + String transType = "E"; + if (idValue == null) + transType = "A"; + + String fullDatasetName = getFullDatasetName(type, set); + + String saveSql = getSaveSql(readResultset, fullDatasetName, id, + transType, queryParams); String sqlErrorMsg = "Additional Fields Type: " + type + " Set: " + set + " Id: " + id; @@ -264,67 +276,37 @@ public class ReadWriteNonCoreDataServiceImpl implements + " - type: " + type + " set: " + set + " id: " + id); } - private void checkResourceTypeAndSetThere(String type, String set) { - - String sql = "select t.id from stretchydata_datasettype t join stretchydata_dataset d on d.datasettype_id = t.id where d.`name` = '" - + set + "' and t.`name` = '" + type + "'"; - - String sqlErrorMsg = "Additional Fields Type: " + type + " Set: " - + set + " Sql: " + sql; - CachedRowSet rs = genericDataService.getCachedResultSet(sql, - sqlErrorMsg); - - try { - - if (!(rs.next())) { - throw new AdditionalFieldsNotFoundException(type, set); - } - - } catch (SQLException e) { - throw new PlatformDataIntegrityException("error.msg.sql.error", - e.getMessage(), sqlErrorMsg); - } - - } - - private String getTransType(String type, String fullDatasetName, Long id) { - - String sql = "select s.id from `" + type + "` t left join `" - + fullDatasetName + "` s on s.id = t.id where t.id = " + id; - - String sqlErrorMsg = "Additional Fields Type: " + type - + " Full Set Name: " + fullDatasetName + " Sql: " + sql; - CachedRowSet rs = genericDataService.getCachedResultSet(sql, - sqlErrorMsg); - - try { - - if (rs.next()) { - String idValue = rs.getString("id"); - if (idValue != null) - return "E"; // update (edit) - - return "A"; // create (add) - } - throw new AdditionalFieldsNotFoundException(type, id); - - } catch (SQLException e) { - throw new PlatformDataIntegrityException("error.msg.sql.error", - e.getMessage(), sqlErrorMsg); - } - - } - - private String getSaveSql(String fullSetName, Long id, String transType, + private String getSaveSql(GenericResultsetData readResultset, + String fullSetName, Long id, String transType, Map queryParams) { - String pValue = ""; + Set keys = queryParams.keySet(); + + String underscore = "_"; + String space = " "; + String pValue = null; + String currValue = null; + String keyUpdated = null; + List columnHeaders = readResultset + .getColumnHeaders(); + List columnValues = readResultset.getData().get(0).getRow(); + for (String key : keys) { + if (!(key.equalsIgnoreCase("id"))) { + keyUpdated = genericDataService + .replace(key, underscore, space); + currValue = getCurrentColumnValue(keyUpdated, columnHeaders, + columnValues); + pValue = queryParams.get(key); + + if (notTheSame(currValue, pValue)) { + logger.info("Difference - Column: " + keyUpdated + "- Current Value" + currValue + " New Value: " + pValue); + } + } + } + String pValueWrite = ""; String saveSql = ""; String singleQuote = "'"; - String underscore = "_"; - String space = " "; - Set keys = queryParams.keySet(); if (transType.equals("E")) { boolean firstColumn = true; @@ -387,6 +369,35 @@ public class ReadWriteNonCoreDataServiceImpl implements return saveSql; } + private boolean notTheSame(String currValue, String pValue) { + if (StringUtils.isEmpty(currValue) && StringUtils.isEmpty(pValue)) + return false; + + if (StringUtils.isEmpty(currValue)) + return true; + + if (StringUtils.isEmpty(pValue)) + return true; + + if (currValue.equals(pValue)) + return false; + + return true; + } + + private String getCurrentColumnValue(String key, + List columnHeaders, List columnValues) { + + for (int i = 0; i < columnHeaders.size(); i++) { + if (columnHeaders.get(i).getColumnName().equalsIgnoreCase(key)) + return columnValues.get(i); + } + + throw new PlatformDataIntegrityException( + "error.msg.invalid.columnName", "Parameter Column Name: " + key + + " not found"); + } + private void checkMainResourceExistsWithinScope(String type, Long id) { String unscopedSql = "select t.id from " + type