package rocks.inspectit.shared.cs.ci.profile.data;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlElementRefs;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.commons.collections.CollectionUtils;
import rocks.inspectit.shared.cs.ci.assignment.AbstractClassSensorAssignment;
import rocks.inspectit.shared.cs.ci.assignment.impl.ChartingMethodSensorAssignment;
import rocks.inspectit.shared.cs.ci.assignment.impl.ExceptionSensorAssignment;
import rocks.inspectit.shared.cs.ci.assignment.impl.MethodSensorAssignment;
import rocks.inspectit.shared.cs.ci.assignment.impl.TimerMethodSensorAssignment;
/**
* Profile data for the sensor assignments.
*
* @author Ivan Senic
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "sensor-assignment-profile-data")
public class SensorAssignmentProfileData extends AbstractProfileData<List<? extends AbstractClassSensorAssignment<?>>> {
/**
* Name.
*/
private static final String NAME = "Sensor Assignment";
/**
* {@link MethodSensorAssignment}s.
*/
@XmlElementRefs({ @XmlElementRef(type = MethodSensorAssignment.class), @XmlElementRef(type = TimerMethodSensorAssignment.class), @XmlElementRef(type = ChartingMethodSensorAssignment.class) })
private List<MethodSensorAssignment> methodSensorAssignments;
/**
* {@link ExceptionSensorAssignment}s.
*/
@XmlElementRefs({ @XmlElementRef(type = ExceptionSensorAssignment.class) })
private List<ExceptionSensorAssignment> exceptionSensorAssignments;
/**
* {@inheritDoc}
*/
@Override
public List<? extends AbstractClassSensorAssignment<?>> getData() {
List<AbstractClassSensorAssignment<?>> results = new ArrayList<>();
if (CollectionUtils.isNotEmpty(methodSensorAssignments)) {
results.addAll(methodSensorAssignments);
}
if (CollectionUtils.isNotEmpty(exceptionSensorAssignments)) {
results.addAll(exceptionSensorAssignments);
}
return results;
}
/**
* {@inheritDoc}
*/
@Override
public String getName() {
return NAME;
}
/**
* Gets {@link #methodSensorAssignments}.
*
* @return {@link #methodSensorAssignments}
*/
public List<MethodSensorAssignment> getMethodSensorAssignments() {
return methodSensorAssignments;
}
/**
* Sets {@link #methodSensorAssignments}.
*
* @param methodSensorAssignments
* New value for {@link #methodSensorAssignments}
*/
public void setMethodSensorAssignments(List<MethodSensorAssignment> methodSensorAssignments) {
this.methodSensorAssignments = methodSensorAssignments;
}
/**
* Gets {@link #exceptionSensorAssignments}.
*
* @return {@link #exceptionSensorAssignments}
*/
public List<ExceptionSensorAssignment> getExceptionSensorAssignments() {
return exceptionSensorAssignments;
}
/**
* Sets {@link #exceptionSensorAssignments}.
*
* @param exceptionSensorAssignments
* New value for {@link #exceptionSensorAssignments}
*/
public void setExceptionSensorAssignments(List<ExceptionSensorAssignment> exceptionSensorAssignments) {
this.exceptionSensorAssignments = exceptionSensorAssignments;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = (prime * result) + ((exceptionSensorAssignments == null) ? 0 : exceptionSensorAssignments.hashCode());
result = (prime * result) + ((methodSensorAssignments == null) ? 0 : methodSensorAssignments.hashCode());
return result;
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
SensorAssignmentProfileData other = (SensorAssignmentProfileData) obj;
if (exceptionSensorAssignments == null) {
if (other.exceptionSensorAssignments != null) {
return false;
}
} else if (!exceptionSensorAssignments.equals(other.exceptionSensorAssignments)) {
return false;
}
if (methodSensorAssignments == null) {
if (other.methodSensorAssignments != null) {
return false;
}
} else if (!methodSensorAssignments.equals(other.methodSensorAssignments)) {
return false;
}
return true;
}
}