package rocks.inspectit.shared.cs.ci.business.expression.impl; import java.util.Collections; 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.XmlRootElement; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import com.google.common.base.Objects; import rocks.inspectit.shared.all.cmr.service.ICachedDataService; import rocks.inspectit.shared.all.communication.data.InvocationSequenceData; import rocks.inspectit.shared.cs.ci.business.expression.AbstractExpression; import rocks.inspectit.shared.cs.ci.business.expression.IContainerExpression; /** * NOT expression definition. * * @author Alexander Wert * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "not") @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE) public class NotExpression extends AbstractExpression implements IContainerExpression { /** * Operand. */ @XmlElementRef(name = "operand", type = AbstractExpression.class, required = false) private AbstractExpression operand; /** * Default Constructor. */ public NotExpression() { } /** * Constructor. * * @param operand * expression to negate */ public NotExpression(AbstractExpression operand) { this.operand = operand; } /** * Gets {@link #operand}. * * @return {@link #operand} */ public AbstractExpression getOperand() { return operand; } /** * Sets {@link #operand}. * * @param operand * New value for {@link #operand} */ public void setOperand(AbstractExpression operand) { this.operand = operand; } /** * {@inheritDoc} */ @Override public int getNumberOfChildExpressions() { return null == operand ? 0 : 1; } /** * {@inheritDoc} */ @Override public boolean evaluate(InvocationSequenceData invocSequence, ICachedDataService cachedDataService) { return null == getOperand() ? false : !getOperand().evaluate(invocSequence, cachedDataService); } /** * {@inheritDoc} */ @Override public void addOperand(AbstractExpression operand) { if (canAddOperand()) { setOperand(operand); } } /** * {@inheritDoc} */ @Override public boolean canAddOperand() { return getNumberOfChildExpressions() < 1; } /** * {@inheritDoc} */ @Override public List<AbstractExpression> getOperands() { if (null != getOperand()) { return Collections.singletonList(getOperand()); } else { return Collections.emptyList(); } } /** * {@inheritDoc} */ @Override public void removeOperand(AbstractExpression operand) { if (Objects.equal(operand, getOperand())) { setOperand(null); } } }