package org.ei.drishti.domain;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.codehaus.jackson.annotate.JsonProperty;
import org.ei.drishti.dto.ActionData;
import org.ektorp.support.TypeDiscriminator;
import org.motechproject.model.MotechBaseDataObject;
import org.motechproject.util.DateUtil;
import java.util.Map;
@TypeDiscriminator("doc.type === 'Action'")
public class Action extends MotechBaseDataObject {
@JsonProperty
private String anmIdentifier;
@JsonProperty
private String caseID;
@JsonProperty
private Map<String, String> data;
@JsonProperty
private String actionTarget;
@JsonProperty
private String actionType;
@JsonProperty
private Boolean isActionActive;
@JsonProperty
private long timeStamp;
@JsonProperty
private Map<String, String> details;
private Action() {
}
public Action(String caseId, String anmIdentifier, ActionData actionData) {
this.anmIdentifier = anmIdentifier;
this.caseID = caseId;
this.data = actionData.data();
this.actionTarget = actionData.target();
this.actionType = actionData.type();
this.timeStamp = DateUtil.now().getMillis();
this.details = actionData.details();
this.isActionActive = true;
}
public String anmIdentifier() {
return anmIdentifier;
}
public String caseId() {
return caseID;
}
public Map<String, String> data() {
return data;
}
public String actionType() {
return actionType;
}
public long timestamp() {
return timeStamp;
}
public String target() {
return actionTarget;
}
public Action markAsInActive() {
this.isActionActive = false;
return this;
}
public Boolean getIsActionActive() {
return isActionActive;
}
public Map<String, String> details() {
return details;
}
private String getCaseID() {
return caseID;
}
public String getActionTarget() {
return actionTarget;
}
@Override
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o, "timeStamp", "revision");
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this, "timeStamp", "revision");
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}