from MIFOSX-38, tidy up serialization around notes.

This commit is contained in:
Keith Woodlock
2012-08-22 01:09:33 +01:00
parent f2ca1746a4
commit 4a11cb3290
5 changed files with 25 additions and 60 deletions
@@ -256,7 +256,7 @@ public class ClientsApiResource {
Collection<NoteData> notes = this.clientReadPlatformService.retrieveAllClientNotes(clientId); Collection<NoteData> notes = this.clientReadPlatformService.retrieveAllClientNotes(clientId);
return this.apiDataConversionService.convertNoteDataToJson(prettyPrint, responseParameters, notes); return this.apiJsonSerializerService.serializeNoteDataToJson(prettyPrint, responseParameters, notes);
} }
@POST @POST
@@ -294,7 +294,7 @@ public class ClientsApiResource {
NoteData note = this.clientReadPlatformService.retrieveClientNote(clientId, noteId); NoteData note = this.clientReadPlatformService.retrieveClientNote(clientId, noteId);
return this.apiDataConversionService.convertNoteDataToJson(prettyPrint, responseParameters, note); return this.apiJsonSerializerService.serializeNoteDataToJson(prettyPrint, responseParameters, note);
} }
@PUT @PUT
@@ -1,6 +1,5 @@
package org.mifosng.platform.api.infrastructure; package org.mifosng.platform.api.infrastructure;
import java.util.Collection;
import java.util.Set; import java.util.Set;
import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand; import org.mifosng.platform.api.commands.AdjustLoanTransactionCommand;
@@ -25,15 +24,10 @@ import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanAccountData;
import org.mifosng.platform.api.data.LoanTransactionData; import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.api.data.NoteData;
public interface ApiDataConversionService { public interface ApiDataConversionService {
// //
String convertNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, NoteData note);
String convertNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<NoteData> notes);
String convertNewLoanDataToJson(boolean prettyPrint, Set<String> responseParameters, NewLoanData newLoanData); String convertNewLoanDataToJson(boolean prettyPrint, Set<String> responseParameters, NewLoanData newLoanData);
String convertLoanAccountDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanAccountData loanAccount); String convertLoanAccountDataToJson(boolean prettyPrint, Set<String> responseParameters, LoanAccountData loanAccount);
@@ -8,7 +8,6 @@ import java.text.NumberFormat;
import java.text.ParseException; import java.text.ParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
@@ -42,7 +41,6 @@ import org.mifosng.platform.api.data.ChargeData;
import org.mifosng.platform.api.data.LoanAccountData; import org.mifosng.platform.api.data.LoanAccountData;
import org.mifosng.platform.api.data.LoanTransactionData; import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.api.data.NewLoanData; import org.mifosng.platform.api.data.NewLoanData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.errorhandling.InvalidJsonException; import org.mifosng.platform.api.errorhandling.InvalidJsonException;
import org.mifosng.platform.api.errorhandling.UnsupportedParameterException; import org.mifosng.platform.api.errorhandling.UnsupportedParameterException;
import org.mifosng.platform.exceptions.PlatformApiDataValidationException; import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
@@ -173,55 +171,6 @@ public class ApiDataConversionServiceImpl implements ApiDataConversionService {
return gsonDeserializer.toJson(newLoanData); return gsonDeserializer.toJson(newLoanData);
} }
@Override
public String convertNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<NoteData> notes) {
final boolean returnAsArray = true;
return doConvertNoteDataToJson(prettyPrint, returnAsArray, responseParameters, notes.toArray(new NoteData[notes.size()]));
}
@Override
public String convertNoteDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final NoteData note) {
final boolean returnAsArray = false;
return doConvertNoteDataToJson(prettyPrint, returnAsArray, responseParameters, note);
}
private String doConvertNoteDataToJson(final boolean prettyPrint, final boolean returnAsArray, final Set<String> responseParameters, final NoteData... notes) {
final Set<String> supportedParameters = new HashSet<String>(
Arrays.asList("id", "clientId", "loanId", "loanTransactionId", "noteType", "note", "createdById", "createdByUsername",
"createdOn", "updatedById", "updatedByUsername", "updatedOn")
);
final Set<String> parameterNamesToSkip = new HashSet<String>();
if (!responseParameters.isEmpty()) {
if (!supportedParameters.containsAll(responseParameters)) {
throw new UnsupportedParameterException(new ArrayList<String>(responseParameters));
}
parameterNamesToSkip.addAll(supportedParameters);
parameterNamesToSkip.removeAll(responseParameters);
}
ExclusionStrategy strategy = new ParameterListExclusionStrategy(parameterNamesToSkip);
GsonBuilder builder = new GsonBuilder().addSerializationExclusionStrategy(strategy);
builder.registerTypeAdapter(LocalDate.class, new JodaLocalDateAdapter());
builder.registerTypeAdapter(DateTime.class, new JodaDateTimeAdapter());
if (prettyPrint) {
builder.setPrettyPrinting();
}
Gson gsonDeserializer = builder.create();
String json = "";
if (notes != null && notes.length == 1 && !returnAsArray) {
json = gsonDeserializer.toJson(notes[0]);
} else {
json = gsonDeserializer.toJson(notes);
}
return json;
}
@Override @Override
public ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json) { public ChargeCommand convertJsonToChargeCommand(Long resourceIdentifier, String json) {
if (StringUtils.isBlank(json)) { if (StringUtils.isBlank(json)) {
@@ -15,6 +15,7 @@ import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
@@ -76,4 +77,8 @@ public interface ApiJsonSerializerService {
String serializeGroupDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<GroupData> groups); String serializeGroupDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<GroupData> groups);
String serializeGroupDataToJson(boolean prettyPrint, Set<String> responseParameters, GroupData group); String serializeGroupDataToJson(boolean prettyPrint, Set<String> responseParameters, GroupData group);
String serializeNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<NoteData> notes);
String serializeNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, NoteData note);
} }
@@ -17,6 +17,7 @@ import org.mifosng.platform.api.data.FundData;
import org.mifosng.platform.api.data.GenericResultsetData; import org.mifosng.platform.api.data.GenericResultsetData;
import org.mifosng.platform.api.data.GroupData; import org.mifosng.platform.api.data.GroupData;
import org.mifosng.platform.api.data.LoanProductData; import org.mifosng.platform.api.data.LoanProductData;
import org.mifosng.platform.api.data.NoteData;
import org.mifosng.platform.api.data.OfficeData; import org.mifosng.platform.api.data.OfficeData;
import org.mifosng.platform.api.data.OfficeTransactionData; import org.mifosng.platform.api.data.OfficeTransactionData;
import org.mifosng.platform.api.data.PermissionData; import org.mifosng.platform.api.data.PermissionData;
@@ -92,6 +93,10 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
Arrays.asList("id", "name", "externalId", "clientMembers", "allowedClients") Arrays.asList("id", "name", "externalId", "clientMembers", "allowedClients")
); );
private static final Set<String> NOTE_DATA_PARAMETERS = new HashSet<String>(
Arrays.asList("id", "clientId", "loanId", "loanTransactionId", "noteType", "note", "createdById", "createdByUsername",
"createdOn", "updatedById", "updatedByUsername", "updatedOn")
);
private final GoogleGsonSerializerHelper helper; private final GoogleGsonSerializerHelper helper;
@@ -262,4 +267,16 @@ public class GoogleGsonApiJsonSerializerService implements ApiJsonSerializerServ
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(GROUP_DATA_PARAMETERS, prettyPrint, responseParameters); final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(GROUP_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, group); return helper.serializedJsonFrom(gsonDeserializer, group);
} }
@Override
public String serializeNoteDataToJson(boolean prettyPrint, Set<String> responseParameters, Collection<NoteData> notes) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(NOTE_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, notes.toArray(new NoteData[notes.size()]));
}
@Override
public String serializeNoteDataToJson(final boolean prettyPrint, final Set<String> responseParameters, final NoteData note) {
final Gson gsonDeserializer = helper.createGsonBuilderWithParameterExclusionSerializationStrategy(NOTE_DATA_PARAMETERS, prettyPrint, responseParameters);
return helper.serializedJsonFrom(gsonDeserializer, note);
}
} }