package context.arch.intelligibility.expression; import context.arch.storage.Attribute; import context.arch.storage.AttributeNameValue; import context.arch.storage.Attributes; /** * Convenience class to represent a single reason, or reason trace. * It is a Conjunction of terminal Parameters. * @author Brian Y. Lim * */ public class Reason extends Conjunction<Parameter<?>> { private static final long serialVersionUID = 2500473806018907049L; public Reason() { super(); } public Reason(Reason original) { super(original); } /** * Create a Reason with a literal added. * @param literal the first literal added */ public Reason(Parameter<?> literal) { super(); add(literal); } public Reason clone() { return new Reason(this); } /** * Convenience method to convert Attributes to a conjunction Reason. * Only collects AttributeNameValue and ignores if Attribute child has no value. * @param atts * @return */ public static Reason fromAttributes(Attributes atts) { Reason reason = new Reason(); for (Attribute<?> a : atts.values()) { if (a instanceof AttributeNameValue) { AttributeNameValue<?> att = (AttributeNameValue<?>) a; reason.add(Parameter.instance( att.getName(), att.getValue() )); } } return reason; } /** * Convenience method to convert to Attributes. * @return */ public Attributes toAttributes() { Attributes atts = new Attributes(); for (Parameter<?> child : this) { atts.add(AttributeNameValue.instance(child.getName(), child.getValue())); } return atts; } }