[4] | 1 | package tudelft.healthpsychology.traumaontologies.answerstate;
|
---|
| 2 |
|
---|
| 3 | import java.util.Collection;
|
---|
| 4 |
|
---|
| 5 | import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
---|
| 6 | import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
|
---|
| 7 | import com.fasterxml.jackson.annotation.JsonSubTypes;
|
---|
| 8 | import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
---|
| 9 |
|
---|
[5] | 10 | import tudelft.healthpsychology.traumaontologies.questiontypes.TypedQuestion;
|
---|
[4] | 11 | import tudelft.utilities.tree.Tree;
|
---|
| 12 |
|
---|
| 13 | /**
|
---|
| 14 | * <o> Defines (possibly partial) answer to a question and the answer type
|
---|
| 15 | * needed to bring it closer to a full answer. An AnswerState contains
|
---|
| 16 | * references to node labels in a {@link Tree}. The tree structure
|
---|
| 17 | * (children/parent relations, node labels and node attributes) contains the
|
---|
| 18 | * detailed information for the answerstate on how to proceed.
|
---|
| 19 | * </p>
|
---|
| 20 | * <o> All {@link AnswerState}s work like this: provide answers (just a string)
|
---|
| 21 | * to all the questions until there are no more questions.
|
---|
| 22 | * </p>
|
---|
| 23 | * <o> To get the next question, call {@link #getOptions()} which gives you the
|
---|
| 24 | * question and the allowed answers. Call {@link #with(String)} with the answer
|
---|
| 25 | * string and update to the returned state. Repeat until {@link #getOptions()}
|
---|
| 26 | * returns null.
|
---|
| 27 | * </p>
|
---|
| 28 | * <o> All AnswerState implementations are immutable,
|
---|
| 29 | * </p>
|
---|
| 30 | */
|
---|
| 31 | @JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
|
---|
| 32 | @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
|
---|
| 33 | @JsonSubTypes({ @JsonSubTypes.Type(value = AnswersBreathFirstState.class),
|
---|
| 34 | @JsonSubTypes.Type(value = AnswersDepthFirstState.class),
|
---|
| 35 | @JsonSubTypes.Type(value = AnswerStateExplanationDecorator.class),
|
---|
| 36 | @JsonSubTypes.Type(value = ListOfAnswersState.class),
|
---|
| 37 | @JsonSubTypes.Type(value = OntoPropAnswerState.class),
|
---|
| 38 | @JsonSubTypes.Type(value = PropertiesAnswerState.class) })
|
---|
| 39 | public interface AnswerState {
|
---|
| 40 |
|
---|
| 41 | /**
|
---|
| 42 | * @param tree the tree containing the node(s) relevant for this state.
|
---|
| 43 | * @return the type of the possible answer(s). null if this is the final
|
---|
| 44 | * state.
|
---|
| 45 | */
|
---|
[5] | 46 | TypedQuestion getOptions(
|
---|
[4] | 47 | Tree<String, Collection<Property>, OntologyNode> tree);
|
---|
| 48 |
|
---|
| 49 | /**
|
---|
| 50 | *
|
---|
| 51 | * @param answer the next answer. In some cases "null" is accepted, as the
|
---|
| 52 | * "other", "not applicable" or "don't know" option.
|
---|
| 53 | * @param tree the tree containing the node(s) relevant for this state.
|
---|
| 54 | * @return a new state representing the situation after the answer was given
|
---|
| 55 | * @throws IllegalArgumentException if the given answer does not fit : see
|
---|
[5] | 56 | * {@link TypedQuestion#fits(String)}
|
---|
[4] | 57 | */
|
---|
| 58 | AnswerState with(String answer,
|
---|
| 59 | Tree<String, Collection<Property>, OntologyNode> tree);
|
---|
| 60 |
|
---|
| 61 | }
|
---|