From e43f007bd4cb54036e213fec022fc91e5f897df3 Mon Sep 17 00:00:00 2001 From: John Woodlock Date: Fri, 25 May 2012 14:57:09 +1000 Subject: [PATCH] WIP fields parameter additionfields --- .../org/mifosng/data/AdditionalFieldsSet.java | 3 + .../mifosng/data/AdditionalFieldsSets.java | 29 --------- .../WEB-INF/static/stretchydata-0.947.js | 10 ++-- .../ReadExtraDataAndReportingService.java | 5 +- .../ReadExtraDataAndReportingServiceImpl.java | 8 +-- .../api/AdditionalFieldsApiResource.java | 60 ++++++++++++------- .../platform/api/OfficeApiResource.java | 37 +++++++----- .../ApiJSONFormattingService.java | 4 +- .../ApiJSONFormattingServiceImpl.java | 30 ++++------ 9 files changed, 89 insertions(+), 97 deletions(-) delete mode 100644 mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSets.java diff --git a/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSet.java b/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSet.java index 9ac3cd38d..cb261aa8f 100644 --- a/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSet.java +++ b/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSet.java @@ -2,7 +2,10 @@ package org.mifosng.data; import javax.xml.bind.annotation.XmlRootElement; +import org.codehaus.jackson.map.annotate.JsonFilter; + @XmlRootElement +@JsonFilter("myFilter") public class AdditionalFieldsSet { private Integer id; diff --git a/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSets.java b/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSets.java deleted file mode 100644 index 7eadb8816..000000000 --- a/mifosng-data/src/main/java/org/mifosng/data/AdditionalFieldsSets.java +++ /dev/null @@ -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 AdditionalFieldsSets { - - private List additionalFieldsSets = new ArrayList(); - - protected AdditionalFieldsSets() { - // - } - - public AdditionalFieldsSets(final List additionalFieldsSets) { - this.additionalFieldsSets = additionalFieldsSets; - } - - public List getAdditionalFieldsSets() { - return additionalFieldsSets; - } - - public void setAdditionalFieldsSets(List additionalFieldsSets) { - this.additionalFieldsSets = additionalFieldsSets; - } - -} \ No newline at end of file diff --git a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.947.js b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.947.js index dc532c90a..d86cf0ed0 100644 --- a/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.947.js +++ b/mifosng-individual-lending-app/src/main/webapp/WEB-INF/static/stretchydata-0.947.js @@ -53,28 +53,28 @@ headingClassStr = ' class="' + displayAllVars.headingClass + '" '; var extraDataNamesVar = ""; - for ( var i in data.additionalFieldsSets) { + for ( var i in data) { var dsnDivName = generateDsnDivName(displayAllVars.datasetType, i, displayAllVars.datasetTypeDiv); extraDataNamesVar += '
' + doI18N(displayAllVars.headingPrefix) - + doI18N(data.additionalFieldsSets[i].name) + + doI18N(data[i].name) + ' - '; extraDataNamesVar += editExtraDataLink(displayAllVars.url, displayAllVars.basicAuthKey, displayAllVars.datasetType, - data.additionalFieldsSets[i].name, + data[i].name, displayAllVars.datasetPKValue, dsnDivName); extraDataNamesVar += '
'; extraDataNamesVar += '
'; } $('#' + displayAllVars.datasetTypeDiv).html(extraDataNamesVar); - for ( var i in data.additionalFieldsSets) { + for ( var i in data) { var dsnDivName = generateDsnDivName(displayAllVars.datasetType, i, displayAllVars.datasetTypeDiv); viewExtraData(displayAllVars.url, displayAllVars.basicAuthKey, displayAllVars.datasetType, - data.additionalFieldsSets[i].name, + data[i].name, displayAllVars.datasetPKValue, dsnDivName); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java index c69138b4c..3c7d45a54 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingService.java @@ -1,10 +1,11 @@ package org.mifosng.platform; +import java.util.List; import java.util.Map; import javax.ws.rs.core.StreamingOutput; -import org.mifosng.data.AdditionalFieldsSets; +import org.mifosng.data.AdditionalFieldsSet; import org.mifosng.data.reports.GenericResultset; public interface ReadExtraDataAndReportingService { @@ -16,7 +17,7 @@ public interface ReadExtraDataAndReportingService { GenericResultset retrieveGenericResultset(String name, String type, Map extractedQueryParams); - AdditionalFieldsSets retrieveExtraDatasetNames(String type); + List retrieveExtraDatasetNames(String type); GenericResultset retrieveExtraData(String type, String set, Long id); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java index 34134eebc..b39e5293d 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/ReadExtraDataAndReportingServiceImpl.java @@ -17,7 +17,6 @@ import javax.sql.DataSource; import javax.ws.rs.core.StreamingOutput; 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; @@ -331,7 +330,7 @@ public class ReadExtraDataAndReportingServiceImpl implements } @Override - public AdditionalFieldsSets retrieveExtraDatasetNames(String type) { + public List retrieveExtraDatasetNames(String type) { List additionalFieldsSets = new ArrayList(); @@ -366,7 +365,7 @@ public class ReadExtraDataAndReportingServiceImpl implements "Additional Fields Type: " + type); } - return new AdditionalFieldsSets(additionalFieldsSets); + return additionalFieldsSets; } @Override @@ -598,8 +597,7 @@ public class ReadExtraDataAndReportingServiceImpl implements String transType = null; String sql = "select s.id from `" + type + "` t left join `" - + fullDatasetName + "` s on s.id = t.id where t.id = " - + id; + + fullDatasetName + "` s on s.id = t.id where t.id = " + id; try { Connection db_connection = dataSource.getConnection(); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/AdditionalFieldsApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/AdditionalFieldsApiResource.java index 94b5b79a6..20b1dc194 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/AdditionalFieldsApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/AdditionalFieldsApiResource.java @@ -11,23 +11,22 @@ import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; 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.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.AdditionalFieldsSet; import org.mifosng.data.ApiParameterError; import org.mifosng.data.EntityIdentifier; import org.mifosng.data.reports.GenericResultset; import org.mifosng.platform.InvalidSqlException; import org.mifosng.platform.ReadExtraDataAndReportingService; +import org.mifosng.platform.api.infrastructure.ApiJSONFormattingService; import org.mifosng.platform.exceptions.PlatformApiDataValidationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,23 +39,35 @@ import org.springframework.stereotype.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; + @Autowired + private ApiJSONFormattingService jsonFormattingService; + @GET @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON }) - public Response datasets(@Context UriInfo uriInfo) { + public String datasets(@QueryParam("type") String type, + @QueryParam("fields") String fields, + @QueryParam("pretty") String pretty) { - MultivaluedMap queryParams = uriInfo - .getQueryParameters(); - String type = queryParams.getFirst("type"); - - AdditionalFieldsSets result = this.readExtraDataAndReportingService + List result = this.readExtraDataAndReportingService .retrieveExtraDatasetNames(type); - return Response.ok().entity(result).build(); + + String filterType = "E"; + String fieldList = ""; + if (this.jsonFormattingService.isPassed(fields)) { + filterType = "I"; + fieldList = fields; + } + + return this.jsonFormattingService.convertDataObjectJSON(result, + filterType, fieldList, + this.jsonFormattingService.isTrue(pretty)); } @GET @@ -64,8 +75,7 @@ public class AdditionalFieldsApiResource { @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON }) public Response extraData(@PathParam("type") final String type, - @PathParam("set") final String set, - @PathParam("id") final Long id) { + @PathParam("set") final String set, @PathParam("id") final Long id) { try { GenericResultset result = this.readExtraDataAndReportingService @@ -74,9 +84,13 @@ public class AdditionalFieldsApiResource { return Response.ok().entity(result).build(); } catch (InvalidSqlException e) { List dataValidationErrors = new ArrayList(); - ApiParameterError error = ApiParameterError.parameterError("extradata.invalid.sql", "The sql is invalid.", "sql", e.getSql()); + ApiParameterError error = ApiParameterError.parameterError( + "extradata.invalid.sql", "The sql is invalid.", "sql", + e.getSql()); dataValidationErrors.add(error); - throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors); + throw new PlatformApiDataValidationException( + "validation.msg.validation.errors.exist", + "Validation errors exist.", dataValidationErrors); } } @@ -85,8 +99,8 @@ public class AdditionalFieldsApiResource { @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) @Produces({ MediaType.APPLICATION_JSON }) public Response saveExtraData(@PathParam("type") final String type, - @PathParam("set") final String set, - @PathParam("id") final Long id, String reqbody) { + @PathParam("set") final String set, @PathParam("id") final Long id, + String reqbody) { try { @@ -122,11 +136,15 @@ public class AdditionalFieldsApiResource { return Response.ok().entity(entityIdentifier).build(); } catch (InvalidSqlException e) { - + List dataValidationErrors = new ArrayList(); - ApiParameterError error = ApiParameterError.parameterError("extradata.invalid.sql", "The sql is invalid.", "sql", e.getSql()); + ApiParameterError error = ApiParameterError.parameterError( + "extradata.invalid.sql", "The sql is invalid.", "sql", + e.getSql()); dataValidationErrors.add(error); - throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors); + throw new PlatformApiDataValidationException( + "validation.msg.validation.errors.exist", + "Validation errors exist.", dataValidationErrors); } } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeApiResource.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeApiResource.java index 450c86a3c..7fddb100a 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeApiResource.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/OfficeApiResource.java @@ -1,8 +1,6 @@ package org.mifosng.platform.api; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -53,11 +51,15 @@ public class OfficeApiResource { Collection offices = this.readPlatformService .retrieveAllOffices(); - Set excludeFields = new HashSet(); - excludeFields.add("allowedParents"); + String filterType = "E"; + String fieldList = "allowedParents"; + if (this.jsonFormattingService.isPassed(fields)) { + filterType = "I"; + fieldList = fields; + } return this.jsonFormattingService.convertDataObjectJSON(offices, - fields, excludeFields, + filterType, fieldList, this.jsonFormattingService.isTrue(pretty)); } @@ -70,11 +72,11 @@ public class OfficeApiResource { OfficeData officeData = this.readPlatformService .retrieveNewOfficeTemplate(); - Set excludeFields = new HashSet(); - String includeFields = "openingDate,allowedParents"; + String filterType = "I"; + String fieldList = "openingDate,allowedParents"; return this.jsonFormattingService.convertDataObjectJSON(officeData, - includeFields, excludeFields, + filterType, fieldList, this.jsonFormattingService.isTrue(pretty)); } @@ -102,26 +104,31 @@ public class OfficeApiResource { @QueryParam("template") String template, @QueryParam("pretty") String pretty) { - String includeFields = fields; - Set excludeFields = new HashSet(); OfficeData office = this.readPlatformService.retrieveOffice(officeId); + String filterType = "E"; + String fieldList = ""; + if (this.jsonFormattingService.isPassed(fields)) { + filterType = "I"; + fieldList = fields; + } + if (this.jsonFormattingService.isTrue(template)) { office.setAllowedParents(this.readPlatformService .retrieveAllowedParents(officeId)); - if (this.jsonFormattingService.isPassed(includeFields)) { - includeFields += ",allowedParents"; + if (this.jsonFormattingService.isPassed(fields)) { + fieldList += ",allowedParents"; } } else { - if (!(this.jsonFormattingService.isPassed(includeFields))) { - excludeFields.add("allowedParents"); + if (!(this.jsonFormattingService.isPassed(fields))) { + fieldList = "allowedParents"; } } return this.jsonFormattingService.convertDataObjectJSON(office, - includeFields, excludeFields, + filterType, fieldList, this.jsonFormattingService.isTrue(pretty)); } diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingService.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingService.java index d6dd5d698..ab40dd780 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingService.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingService.java @@ -4,8 +4,8 @@ import java.util.Set; public interface ApiJSONFormattingService { - String convertDataObjectJSON(Object dataObject, String fields, - Set excludeFields, boolean prettyOutput); + String convertDataObjectJSON(Object dataObject, String filterType, + String fields, boolean prettyOutput); Boolean isTrue(String param); diff --git a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java index b63562565..90fde8b4f 100644 --- a/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosng/platform/api/infrastructure/ApiJSONFormattingServiceImpl.java @@ -13,44 +13,38 @@ import org.codehaus.jackson.map.ser.FilterProvider; import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter; import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider; import org.mifosng.platform.exceptions.PlatformInternalServerException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service public class ApiJSONFormattingServiceImpl implements ApiJSONFormattingService { - private final static Logger logger = LoggerFactory - .getLogger(ApiJSONFormattingServiceImpl.class); - @Override - public String convertDataObjectJSON(Object dataObject, String fields, - Set excludeFields, boolean prettyOutput) { + public String convertDataObjectJSON(Object dataObject, String filterType, + String fields, boolean prettyOutput) { try { String json = ""; String myFilter = "myFilter"; - Set includeFields = new HashSet(); FilterProvider filters = null; + Set filterFields = new HashSet(); - if (fields == null || fields.equals("")) { + StringTokenizer st = new StringTokenizer(fields, ","); + while (st.hasMoreTokens()) { + filterFields.add(st.nextToken().trim()); + } + + if (filterType.equals("I")) { filters = new SimpleFilterProvider().addFilter(myFilter, SimpleBeanPropertyFilter - .serializeAllExcept(excludeFields)); + .filterOutAllExcept(filterFields)); } else { - - StringTokenizer st = new StringTokenizer(fields, ","); - while (st.hasMoreTokens()) { - includeFields.add(st.nextToken().trim()); - } - filters = new SimpleFilterProvider().addFilter(myFilter, SimpleBeanPropertyFilter - .filterOutAllExcept(includeFields)); + .serializeAllExcept(filterFields)); } - ObjectWriter jsonWriter = null; + ObjectWriter jsonWriter = null; if (prettyOutput) { jsonWriter = new ObjectMapper() .writerWithDefaultPrettyPrinter();