Incident.java

package com.capitalone.dashboard.model;

import org.bson.types.ObjectId;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.springframework.data.mongodb.core.mapping.Document;

import java.util.Objects;

@Document(collection="incident")
public class Incident extends BaseModel {

    private ObjectId collectorItemId;
    private Long timestamp;
    private String incidentItem;
    private String incidentID;
    private String category;
    private Long openTime;
    private String openedBy;
    private String severity;
    private Long updatedTime;
    private String primaryAssignmentGroup;
    private String status;
    private Long closedTime;
    private String closedBy;
    private String closureCode;
    private String affectedItem;
    private String incidentDescription;
    private String incidentSysID;
    private String affectedItemType;
    private String affectedItemSysId;
    private String affectedBusinessServiceItem;
    private String affectedBusinessServiceItemType;
    private String affectedBusinessServiceItemSysId;
    private boolean attachedToBusinessServiceOrEnvironmentOnly;

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ");

    public ObjectId getCollectorItemId() { return collectorItemId; }

    public void setCollectorItemId(ObjectId collectorItemId) { this.collectorItemId = collectorItemId; }

    public long getTimestamp() { return timestamp; }

    public void setTimestamp(long timestamp) { this.timestamp = timestamp; }

    public void setTimestamp(String timestamp) { this.timestamp = DATE_FORMATTER.parseMillis(timestamp); }

    public String getIncidentItem() { return incidentItem; }

    public void setIncidentItem(String incidentItem) { this.incidentItem = incidentItem; }

    public String getIncidentID() { return incidentID; }

    public void setIncidentID(String incidentID) { this.incidentID = incidentID; }

    public String getCategory() { return category; }

    public void setCategory(String category) { this.category = category; }

    public Long getOpenTime() { return openTime; }

    public void setOpenTime(Long openTime) { this.openTime = openTime; }

    public void setOpenTime(String openTime) { this.setOpenTime(DATE_FORMATTER.parseMillis(openTime)); }

    public String getOpenedBy() { return openedBy; }

    public void setOpenedBy(String openedBy) { this.openedBy = openedBy; }

    public String getSeverity() { return severity; }

    public void setSeverity(String severity) { this.severity = severity; }

    public long getUpdatedTime() { return updatedTime; }

    public void setUpdatedTime(long updatedTime) { this.updatedTime = updatedTime; }

    public void setUpdatedTime(String updatedTime) { this.updatedTime = DATE_FORMATTER.parseMillis(updatedTime); }

    public String getPrimaryAssignmentGroup() { return primaryAssignmentGroup; }

    public void setPrimaryAssignmentGroup(String primaryAssignmentGroup) { this.primaryAssignmentGroup = primaryAssignmentGroup; }

    public String getStatus() { return status; }

    public void setStatus(String status) { this.status = status; }

    public Long getClosedTime() { return closedTime; }

    public void setClosedTime(Long closedTime) { this.closedTime = closedTime; }

    public void setClosedTime(String closedTime) { this.setClosedTime(DATE_FORMATTER.parseMillis(closedTime)); }

    public String getClosedBy() { return closedBy; }

    public void setClosedBy(String closedBy) { this.closedBy = closedBy; }

    public String getClosureCode() { return closureCode; }

    public void setClosureCode(String closureCode) { this.closureCode = closureCode; }

    public String getAffectedItem() { return affectedItem; }

    public void setAffectedItem(String affectedItem) { this.affectedItem = affectedItem; }

    public String getIncidentDescription() { return incidentDescription; }

    public void setIncidentDescription(String incidentDescription) { this.incidentDescription = incidentDescription; }

    public String getIncidentSysID() { return incidentSysID; }

    public void setIncidentSysID(String incidentSysID) { this.incidentSysID = incidentSysID; }

    public String getAffectedItemType() { return affectedItemType; }

    public void setAffectedItemType(String affectedItemType) { this.affectedItemType = affectedItemType; }

    public String getAffectedItemSysId() { return affectedItemSysId; }

    public void setAffectedItemSysId(String affectedItemSysId) { this.affectedItemSysId = affectedItemSysId; }

    public String getAffectedBusinessServiceItem() { return affectedBusinessServiceItem; }

    public void setAffectedBusinessServiceItem(String affectedBusinessServiceItem) {
        this.affectedBusinessServiceItem = affectedBusinessServiceItem;
    }

    public String getAffectedBusinessServiceItemType() { return affectedBusinessServiceItemType; }

    public void setAffectedBusinessServiceItemType(String affectedBusinessServiceItemType) {
        this.affectedBusinessServiceItemType = affectedBusinessServiceItemType;
    }

    public String getAffectedBusinessServiceItemSysId() { return affectedBusinessServiceItemSysId; }

    public void setAffectedBusinessServiceItemSysId(String affectedBusinessServiceItemSysId) {
        this.affectedBusinessServiceItemSysId = affectedBusinessServiceItemSysId;
    }

    public boolean isAttachedToBusinessServiceOrEnvironmentOnly() { return attachedToBusinessServiceOrEnvironmentOnly; }

    public void setAttachedToBusinessServiceOrEnvironmentOnly(boolean attachedToBusinessServiceOrEnvironmentOnly) {
        this.attachedToBusinessServiceOrEnvironmentOnly = attachedToBusinessServiceOrEnvironmentOnly;
    }

    @Override
    public boolean equals(Object compareTo){
        boolean doesEqual = true;

        if(compareTo == null || !compareTo.getClass().isAssignableFrom(Incident.class)){
            doesEqual = false;
        }else {
            Incident newIncident = (Incident) compareTo;

            if(!newIncident.toString().equals(toString())){
                doesEqual = false;
            }
        }

        return doesEqual;
    }

    /**
     *  Returns human readable string of the Incident Object.
     *  * equals(Object object) depends on this method. Changing this method could alter the return of the equals method.
     * @return object to string
     */
    @Override
    public String toString() {

        StringBuffer buf = new StringBuffer(210);
        buf.append("incidentID: ")
                .append(incidentID);

        return buf.toString();
    }

    @Override
    public int hashCode(){
        return Objects.hash(incidentID);
    }

}