Changeset 1217 for trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/NoLetterOrDigitRatioMetric.java
- Timestamp:
- 06/06/13 17:08:25 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/rules/metrics/NoLetterOrDigitRatioMetric.java
r1152 r1217 15 15 package de.ugoe.cs.autoquest.usability.rules.metrics; 16 16 17 import static de.ugoe.cs.autoquest.usability.task tree.filters.EventTypeFilter.TEXT_INPUT;17 import static de.ugoe.cs.autoquest.usability.taskmodel.filter.types.EventTypeFilter.TEXT_INPUT; 18 18 import static de.ugoe.cs.autoquest.usability.util.TextInputUtil.aggregateEnteredTextFromTextInputs; 19 import static de.ugoe.cs.autoquest.usability.util.TextInputUtil.characterIs LetterOrDigitPredicate;19 import static de.ugoe.cs.autoquest.usability.util.TextInputUtil.characterIsNoLetterOrDigitPredicate; 20 20 21 21 import java.util.List; … … 28 28 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel; 29 29 import de.ugoe.cs.autoquest.usability.EvaluationMethodCaller; 30 import de.ugoe.cs.autoquest.usability.result. DefectDescriptionResolver;31 import de.ugoe.cs.autoquest.usability.result.Usability Defect;30 import de.ugoe.cs.autoquest.usability.result.UsabilityProblemDescriptionResolver; 31 import de.ugoe.cs.autoquest.usability.result.UsabilityProblemDescription; 32 32 import de.ugoe.cs.autoquest.usability.rules.UsabilityMetric; 33 33 import de.ugoe.cs.autoquest.usability.rules.UsabilityRule; 34 import de.ugoe.cs.autoquest.usability.task tree.FilterResult;35 import de.ugoe.cs.autoquest.usability.task tree.IterativeDFSFilterStrategy;36 import de.ugoe.cs.autoquest.usability.task tree.filters.TaskModelFilter;34 import de.ugoe.cs.autoquest.usability.taskmodel.filter.FilterResult; 35 import de.ugoe.cs.autoquest.usability.taskmodel.filter.IterativeDFSFilterStrategy; 36 import de.ugoe.cs.autoquest.usability.taskmodel.filter.types.TaskModelFilter; 37 37 38 38 /** 39 39 * <p> 40 * TODO comment 40 * Metric, which calculates the ratio ratio between non letter or digit characters and all entered 41 * characters. 41 42 * </p> 42 43 * … … 47 48 /** 48 49 * <p> 49 * TODO: comment50 * Constructor. Creates a new {@code NoLetterOrDigitRatioMetric} for a given task model. 50 51 * </p> 51 * 52 * @param task Tree52 * 53 * @param taskModel 53 54 */ 54 55 public NoLetterOrDigitRatioMetric(ITaskModel taskModel) { 55 56 super(taskModel); 56 57 this.name = "NoLetterOrDigitRatio"; 57 this.defect = new DefectDescriptionResolver().descriptionFor(this.getClass().getSimpleName()); 58 this.defect = 59 new UsabilityProblemDescriptionResolver().descriptionFor(this.getClass() 60 .getSimpleName()); 58 61 } 59 62 60 /* (non-Javadoc) 63 /* 64 * (non-Javadoc) 65 * 61 66 * @see de.ugoe.cs.autoquest.usability.rules.UsabilityRule#check() 62 67 */ 63 68 @Override 64 public Optional<Usability Defect> calculate() {69 public Optional<UsabilityProblemDescription> calculate() { 65 70 FilterResult textInputEvents = extractNodesFromTaskTree(); 66 71 float evaluationMetric = calculateEvaluationMetric(textInputEvents.tasksMatchedFilter()); 67 72 return this.defect.isPresent(evaluationMetric); 68 73 } 69 74 75 /** 76 * 77 * <p> 78 * Filters all text input events from task model. 79 * </p> 80 * 81 * @return {@code FilterResult} 82 */ 70 83 private FilterResult extractNodesFromTaskTree() { 71 84 return new TaskModelFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT) 72 85 .from(this.taskModel); 73 86 } 74 87 88 /** 89 * 90 * <p> 91 * Calculates the metric. 92 * </p> 93 * 94 * @param textInputEvents 95 * all text input events 96 * @return ratio between non letter or digit characters and all entered characters 97 */ 75 98 private float calculateEvaluationMetric(List<ITask> textInputEvents) { 76 Multiset<String> enteredTextFragments = 77 aggregateEnteredTextFromTextInputs(textInputEvents); 99 Multiset<String> enteredTextFragments = aggregateEnteredTextFromTextInputs(textInputEvents); 78 100 int allCharactersCount = 0; 79 101 int noLetterOrDigitCount = 0; … … 82 104 allCharactersCount += CharMatcher.ANY.countIn(textFragment) * occurencesOfTextFragment; 83 105 noLetterOrDigitCount += 84 CharMatcher.forPredicate(characterIs LetterOrDigitPredicate()).countIn(textFragment) *85 occurencesOfTextFragment;106 CharMatcher.forPredicate(characterIsNoLetterOrDigitPredicate()) 107 .countIn(textFragment) * occurencesOfTextFragment; 86 108 } 87 109 return allCharactersCount != 0 ? (float) noLetterOrDigitCount / (float) allCharactersCount … … 89 111 } 90 112 91 /* (non-Javadoc) 92 * @see de.ugoe.cs.autoquest.usability.rules.UsabilityRule#callEvaluationMetho(de.ugoe.cs.autoquest.usability.EvaluationMethodCaller) 113 /* 114 * (non-Javadoc) 115 * 116 * @see 117 * de.ugoe.cs.autoquest.usability.rules.UsabilityRule#callEvaluationMetho(de.ugoe.cs.autoquest 118 * .usability.EvaluationMethodCaller) 93 119 */ 94 120 @Override 95 public Optional<Usability Defect> callEvaluationMethod(EvaluationMethodCaller evaluationMethodCaller)121 public Optional<UsabilityProblemDescription> callEvaluationMethod(EvaluationMethodCaller evaluationMethodCaller) 96 122 { 97 123 return evaluationMethodCaller.check(this);
Note: See TracChangeset
for help on using the changeset viewer.