package com.belladati.sdk.form.impl; import java.math.BigDecimal; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.http.message.BasicNameValuePair; import com.belladati.sdk.form.FormDataPostBuilder; import com.belladati.sdk.impl.BellaDatiServiceImpl; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; /** * Builder used to initiate domain object that should be created. * * @author Lubomir Elko */ public class FormDataPostBuilderImpl implements FormDataPostBuilder { private final BellaDatiServiceImpl service; private final String formId; private boolean posted = false; private final Map<String, String> textValues = new HashMap<>(); private final Map<String, BigDecimal> numberValues = new HashMap<>(); private final Map<String, Boolean> booleanValues = new HashMap<>(); public FormDataPostBuilderImpl(BellaDatiServiceImpl service, String formId) { this.service = service; this.formId = formId; } @Override public void addTextValue(String elementId, String value) { if (value != null) { textValues.put(elementId, value); } } @Override public void addNumberValue(String elementId, BigDecimal value) { if (value != null) { numberValues.put(elementId, value); } } @Override public void addBooleanValue(String elementId, boolean value) { booleanValues.put(elementId, value); } @Override public JsonNode toJson() { ObjectMapper mapper = new ObjectMapper(); ObjectNode object = mapper.createObjectNode(); for (Entry<String, String> entry : textValues.entrySet()) { object.put(entry.getKey(), entry.getValue()); } for (Entry<String, BigDecimal> entry : numberValues.entrySet()) { object.put(entry.getKey(), entry.getValue()); } for (Entry<String, Boolean> entry : booleanValues.entrySet()) { object.put(entry.getKey(), entry.getValue().booleanValue()); } return object; } @Override public String post() { if (posted) { throw new IllegalStateException("Request already submitted to server."); } byte[] response = service.getClient().post("api/import/forms/" + formId, service.getTokenHolder(), Collections.singletonList(new BasicNameValuePair("data", toJson().toString()))); posted = true; return new String(response); } }