package org.ei.drishti.common.domain;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.codehaus.jackson.annotate.JsonProperty;
import org.ei.drishti.domain.Location;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.ei.drishti.common.AllConstants.ReportDataParameters.*;
public class ReportingData implements Serializable {
private static final long serialVersionUID = 454645765753L;
@JsonProperty
private String type;
@JsonProperty
private Map<String, String> data;
public static ReportingData serviceProvidedData(String anmIdentifier, String externalId, Indicator indicator, String date, Location location, String dristhiEntityId) {
return new ReportingData(SERVICE_PROVIDED_DATA_TYPE)
.with(ANM_IDENTIFIER, anmIdentifier)
.with(INDICATOR, indicator.value())
.with(EXTERNAL_ID, externalId)
.with(VILLAGE, location.village())
.with(SUB_CENTER, location.subCenter())
.with(PHC, location.phc())
.with(SERVICE_PROVIDED_DATE, date)
.with(DRISTHI_ENTITY_ID, dristhiEntityId)
.with(SERVICE_PROVIDER_TYPE, SERVICE_PROVIDER_ANM);
}
public static ReportingData anmReportData(String anmIdentifier, String externalId, Indicator indicator, String date) {
return new ReportingData(ANM_REPORT_DATA_TYPE)
.with(ANM_IDENTIFIER, anmIdentifier)
.with(INDICATOR, indicator.value())
.with(EXTERNAL_ID, externalId)
.with(SERVICE_PROVIDED_DATE, date);
}
private ReportingData() {
}
public ReportingData(String type) {
this.type = type;
data = new HashMap<>();
}
public ReportingData(String type, Map<String, String> data) {
this.type = type;
this.data = data;
}
public ReportingData with(String key, String value) {
data.put(key, value);
return this;
}
public ReportingData withQuantity(String quantity) {
data.put(QUANTITY, quantity);
return this;
}
public String get(String key) {
return data.get(key);
}
public String type() {
return type;
}
public ArrayList getMissingReportDataForANMReport() {
ArrayList missingData = new ArrayList();
addToMissingDataIfFieldValueIsMissing(ANM_IDENTIFIER, missingData);
addToMissingDataIfFieldValueIsMissing(EXTERNAL_ID, missingData);
addToMissingDataIfFieldValueIsMissing(INDICATOR, missingData);
addToMissingDataIfFieldValueIsMissing(SERVICE_PROVIDED_DATE, missingData);
return missingData;
}
public ArrayList getMissingReportDataForServiceProvided() {
ArrayList missingData = new ArrayList();
addToMissingDataIfFieldValueIsMissing(ANM_IDENTIFIER, missingData);
addToMissingDataIfFieldValueIsMissing(SERVICE_PROVIDER_TYPE, missingData);
addToMissingDataIfFieldValueIsMissing(EXTERNAL_ID, missingData);
addToMissingDataIfFieldValueIsMissing(INDICATOR, missingData);
addToMissingDataIfFieldValueIsMissing(SERVICE_PROVIDED_DATE, missingData);
addToMissingDataIfFieldValueIsMissing(VILLAGE, missingData);
addToMissingDataIfFieldValueIsMissing(SUB_CENTER, missingData);
addToMissingDataIfFieldValueIsMissing(PHC, missingData);
addToMissingDataIfFieldValueIsMissing(DRISTHI_ENTITY_ID, missingData);
return missingData;
}
private void addToMissingDataIfFieldValueIsMissing(String fieldName, ArrayList missingData) {
if (isBlank(get(fieldName))) {
missingData.add(fieldName);
}
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
}