/**
* Copyright (c) 1997, 2015 by ProSyst Software GmbH and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.smarthome.automation;
/**
* This class is used to present status of rule. The status consists out of three parts:
* The main status, a status detail and a string description.
*
* @author Yordan Mihaylov - Initial contribution
* @author Kai Kreuzer - Refactored to match ThingStatusInfo implementation
*/
public class RuleStatusInfo {
private RuleStatus status;
private RuleStatusDetail statusDetail;
private String description;
/**
* Default constructor for deserialization e.g. by Gson.
*/
protected RuleStatusInfo() {
}
/**
* Constructs a status info.
*
* @param status the status (must not be null)
*
* @throws IllegalArgumentException if status is null
*/
public RuleStatusInfo(RuleStatus status) throws IllegalArgumentException {
this(status, RuleStatusDetail.NONE);
}
/**
* Constructs a status info.
*
* @param status the status (must not be null)
* @param statusDetail the detail of the status (must not be null)
*
* @throws IllegalArgumentException if status or status detail is null
*/
public RuleStatusInfo(RuleStatus status, RuleStatusDetail statusDetail) throws IllegalArgumentException {
this(status, statusDetail, null);
}
/**
* Constructs a status info.
*
* @param status the status (must not be null)
* @param statusDetail the detail of the status (must not be null)
* @param description the description of the status
*
* @throws IllegalArgumentException if status or status detail is null
*/
public RuleStatusInfo(RuleStatus status, RuleStatusDetail statusDetail, String description)
throws IllegalArgumentException {
if (status == null) {
throw new IllegalArgumentException("Thing status must not be null");
}
if (statusDetail == null) {
throw new IllegalArgumentException("Thing status detail must not be null");
}
this.status = status;
this.statusDetail = statusDetail;
this.description = description;
}
/**
* Gets the status itself.
*
* @return the status (not null)
*/
public RuleStatus getStatus() {
return status;
}
/**
* Gets the detail of the status.
*
* @return the status detail (not null)
*/
public RuleStatusDetail getStatusDetail() {
return statusDetail;
}
/**
* Gets the description of the status.
*
* @return the description
*/
public String getDescription() {
return description;
}
@Override
public String toString() {
boolean hasDescription = getDescription() != null && !getDescription().isEmpty();
return getStatus() + (getStatusDetail() == RuleStatusDetail.NONE ? "" : " (" + getStatusDetail() + ")")
+ (hasDescription ? ": " + getDescription() : "");
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((statusDetail == null) ? 0 : statusDetail.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
RuleStatusInfo other = (RuleStatusInfo) obj;
if (description == null) {
if (other.description != null) {
return false;
}
} else if (!description.equals(other.description)) {
return false;
}
if (status != other.status) {
return false;
}
if (statusDetail != other.statusDetail) {
return false;
}
return true;
}
}