refactoring additional fields for data scope
This commit is contained in:
+74
-63
@@ -8,6 +8,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import javax.sql.rowset.CachedRowSet;
|
import javax.sql.rowset.CachedRowSet;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
import org.mifosng.platform.api.data.AdditionalFieldsSetData;
|
||||||
import org.mifosng.platform.api.data.GenericResultsetData;
|
import org.mifosng.platform.api.data.GenericResultsetData;
|
||||||
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
import org.mifosng.platform.api.data.ResultsetColumnHeader;
|
||||||
@@ -106,7 +107,9 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
String selectFieldList = getSelectFieldListFromColumnHeaders(columnHeaders);
|
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);
|
logger.info("addition fields sql: " + sql);
|
||||||
|
|
||||||
List<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
|
List<ResultsetDataRow> resultsetDataRows = getResultsetDataRows(
|
||||||
@@ -162,11 +165,14 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
private List<ResultsetColumnHeader> getResultsetColumnHeaders(
|
||||||
CachedRowSet columnDefinitions, String sqlErrorMsg) {
|
CachedRowSet columnDefinitions, String sqlErrorMsg) {
|
||||||
|
|
||||||
List<ResultsetColumnHeader> columnHeaders = null;
|
List<ResultsetColumnHeader> columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
||||||
|
ResultsetColumnHeader rschId = new ResultsetColumnHeader();
|
||||||
|
rschId.setColumnName("id");
|
||||||
|
rschId.setColumnType("Integer");
|
||||||
|
columnHeaders.add(rschId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
columnHeaders = new ArrayList<ResultsetColumnHeader>();
|
|
||||||
Integer allowedListId;
|
Integer allowedListId;
|
||||||
while (columnDefinitions.next()) {
|
while (columnDefinitions.next()) {
|
||||||
ResultsetColumnHeader rsch = new ResultsetColumnHeader();
|
ResultsetColumnHeader rsch = new ResultsetColumnHeader();
|
||||||
@@ -249,11 +255,17 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
checkResourceTypeAndSetThere(type, set);// /delete
|
GenericResultsetData readResultset = retrieveExtraData(type, set, id);
|
||||||
String fullDatasetName = getFullDatasetName(type, set);
|
|
||||||
String transType = getTransType(type, fullDatasetName, 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: "
|
String sqlErrorMsg = "Additional Fields Type: " + type + " Set: "
|
||||||
+ set + " Id: " + id;
|
+ set + " Id: " + id;
|
||||||
@@ -264,67 +276,37 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
+ " - type: " + type + " set: " + set + " id: " + id);
|
+ " - type: " + type + " set: " + set + " id: " + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkResourceTypeAndSetThere(String type, String set) {
|
private String getSaveSql(GenericResultsetData readResultset,
|
||||||
|
String fullSetName, Long id, String transType,
|
||||||
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,
|
|
||||||
Map<String, String> queryParams) {
|
Map<String, String> queryParams) {
|
||||||
|
|
||||||
String pValue = "";
|
Set<String> keys = queryParams.keySet();
|
||||||
|
|
||||||
|
String underscore = "_";
|
||||||
|
String space = " ";
|
||||||
|
String pValue = null;
|
||||||
|
String currValue = null;
|
||||||
|
String keyUpdated = null;
|
||||||
|
List<ResultsetColumnHeader> columnHeaders = readResultset
|
||||||
|
.getColumnHeaders();
|
||||||
|
List<String> 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 pValueWrite = "";
|
||||||
String saveSql = "";
|
String saveSql = "";
|
||||||
String singleQuote = "'";
|
String singleQuote = "'";
|
||||||
String underscore = "_";
|
|
||||||
String space = " ";
|
|
||||||
Set<String> keys = queryParams.keySet();
|
|
||||||
|
|
||||||
if (transType.equals("E")) {
|
if (transType.equals("E")) {
|
||||||
boolean firstColumn = true;
|
boolean firstColumn = true;
|
||||||
@@ -387,6 +369,35 @@ public class ReadWriteNonCoreDataServiceImpl implements
|
|||||||
return saveSql;
|
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<ResultsetColumnHeader> columnHeaders, List<String> 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) {
|
private void checkMainResourceExistsWithinScope(String type, Long id) {
|
||||||
|
|
||||||
String unscopedSql = "select t.id from " + type
|
String unscopedSql = "select t.id from " + type
|
||||||
|
|||||||
Reference in New Issue
Block a user