Skip to content

Instantly share code, notes, and snippets.

@jonathanvila
Last active February 1, 2017 18:00
Show Gist options
  • Save jonathanvila/7d6c57ce5222bf45dbe84a2d06993c30 to your computer and use it in GitHub Desktop.
Save jonathanvila/7d6c57ce5222bf45dbe84a2d06993c30 to your computer and use it in GitHub Desktop.
Transforming List<Map<String,String>> into a XML grouping by a value of the map
public class MapToXMLTransformer {
/*
SKU_ID, DATE_EFF, DATE_INAC, VAT_CODE_ATT, PCNT_TO_APLY
Origin = List<HashMap<String,String>>
[ [skuid=10, date_eff=JAN, date_inac=FEB, vat_code_att=S, pcnt_to_aply=80],
[skuid=10, date_eff=JAN, date_inac=FEB, vat_code_att=Z, pcnt_to_aply=20],
[skuid=10, date_eff=MAR, date_inac=APR, vat_code_att=S, pcnt_to_aply=100]
]
Destination = String
<SkuTax skuId="10">
<SkuTaxPeriod date_eff="JAN" date_inac="FEB">
<Tax vatCode="S" pcnt="80"/>
<Tax vatCode="Z" pcnt="20"/>
</SkuTaxPeriod>
<SkuTaxPeriod date_eff="MAR" date_inac="APR">
<Tax vatCode="S" pcnt="100"/>
</SkuTaxPeriod>
</SkuTax>
*/
private String getSkuNode(Map<String, String> taxElement) {
return "<SkuTax skuId=\"".concat(taxElement.get("SKU_ID").concat("\">"));
}
private String xmlGroupNode(Map<String, String> group) {
return "<SkuTaxPeriod date_eff=\"".concat(group.get("DATE_EFF")).concat("\" date_inac=\"").concat(group.get("DATE_INAC")).concat("\">");
}
private String xmlTaxNode(Map<String,String> mapa) {
return "<Tax vatCode=\"" + mapa.get("VAT_CODE_ATT") + "\" pcnt=\"" + mapa.get("PCNT_TO_APLY") + "\"/>";
}
public String transform(List<Map<String,String>> message_body) {
StringBuilder result = new StringBuilder();
message_body.stream().
collect(Collectors.groupingBy(group -> xmlGroupNode(group))).
entrySet().stream().forEach(period -> {
result.append(period.getKey());
period.getValue().forEach(taxElement -> {
if (!result.toString().contains("<SkuTax")) result.append(getSkuNode(taxElement));
result.append(xmlTaxNode(taxElement));
});
result.append("</SkuTaxPeriod>");
});
return result.append("</SkuTax>").toString();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment