WIP fields parameter additionfields

This commit is contained in:
John Woodlock
2012-05-25 14:57:09 +10:00
parent 8612aef9e6
commit e43f007bd4
9 changed files with 89 additions and 97 deletions
@@ -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;
@@ -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<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;
}
}
@@ -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 += '<br><span ' + headingClassStr + '><b>'
+ doI18N(displayAllVars.headingPrefix)
+ doI18N(data.additionalFieldsSets[i].name)
+ doI18N(data[i].name)
+ ' - </span></b> ';
extraDataNamesVar += editExtraDataLink(displayAllVars.url, displayAllVars.basicAuthKey,
displayAllVars.datasetType,
data.additionalFieldsSets[i].name,
data[i].name,
displayAllVars.datasetPKValue, dsnDivName);
extraDataNamesVar += '<div id="' + dsnDivName + '">';
extraDataNamesVar += '</div>';
}
$('#' + 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);
}
@@ -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<String, String> extractedQueryParams);
AdditionalFieldsSets retrieveExtraDatasetNames(String type);
List<AdditionalFieldsSet> retrieveExtraDatasetNames(String type);
GenericResultset retrieveExtraData(String type, String set, Long id);
@@ -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<AdditionalFieldsSet> retrieveExtraDatasetNames(String type) {
List<AdditionalFieldsSet> additionalFieldsSets = new ArrayList<AdditionalFieldsSet>();
@@ -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();
@@ -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<String, String> queryParams = uriInfo
.getQueryParameters();
String type = queryParams.getFirst("type");
AdditionalFieldsSets result = this.readExtraDataAndReportingService
List<AdditionalFieldsSet> 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<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
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<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
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);
}
}
}
@@ -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<OfficeData> offices = this.readPlatformService
.retrieveAllOffices();
Set<String> excludeFields = new HashSet<String>();
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<String> excludeFields = new HashSet<String>();
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<String> excludeFields = new HashSet<String>();
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));
}
@@ -4,8 +4,8 @@ import java.util.Set;
public interface ApiJSONFormattingService {
String convertDataObjectJSON(Object dataObject, String fields,
Set<String> excludeFields, boolean prettyOutput);
String convertDataObjectJSON(Object dataObject, String filterType,
String fields, boolean prettyOutput);
Boolean isTrue(String param);
@@ -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<String> excludeFields, boolean prettyOutput) {
public String convertDataObjectJSON(Object dataObject, String filterType,
String fields, boolean prettyOutput) {
try {
String json = "";
String myFilter = "myFilter";
Set<String> includeFields = new HashSet<String>();
FilterProvider filters = null;
Set<String> filterFields = new HashSet<String>();
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();