Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefect.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefect.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefect.java	(revision 1040)
@@ -1,2 +1,15 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
 
 package de.ugoe.cs.autoquest.usability.evaluation.result;
@@ -7,23 +20,24 @@
 import java.util.Map;
 
-import lombok.AllArgsConstructor;
-import lombok.ExtensionMethod;
-import lombok.Getter;
-
 import org.apache.commons.lang.StringUtils;
 
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
 import de.ugoe.cs.autoquest.usability.DefectDescription;
 import de.ugoe.cs.autoquest.usability.ParameterFragment;
-import de.ugoe.cs.autoquest.usability.util.DefectDescriptionExtensionMethods;
 
-@AllArgsConstructor
-@ExtensionMethod({DefectDescriptionExtensionMethods.class})
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class UsabilityDefect {
 
-    @Getter
     private UsabilityDefectSeverityLevel severityLevel;
 
@@ -32,21 +46,48 @@
     private Map<String, String> descriptionParametersValues;
 
+    public UsabilityDefect(UsabilityDefectSeverityLevel severityLevel,
+                           DefectDescription defectDescription,
+                           Map<String, String> descriptionParametersValues)
+    {
+        super();
+        this.severityLevel = severityLevel;
+        this.defectDescription = defectDescription;
+        this.descriptionParametersValues = descriptionParametersValues;
+    }
+
     public String defectDescription() {
-        if(defectDescription.containsParameterFragments()) {
+        if (containsParameterFragments(defectDescription)) {
             return assembleDefectDescription();
-        } else {
-            return Joiner.on(" ").skipNulls().join(defectDescription.getTextFragmentOrParameterFragment());
+        }
+        else {
+            return Joiner.on(" ").skipNulls()
+                .join(defectDescription.getTextFragmentOrParameterFragment());
         }
     }
 
+    private boolean containsParameterFragments(DefectDescription defectDescription) {
+        return Iterables.any(defectDescription.getTextFragmentOrParameterFragment(),
+                             new Predicate<Object>() {
+
+                                 @Override
+                                 public boolean apply(Object fragment) {
+                                     return fragment instanceof ParameterFragment;
+                                 }
+
+                             });
+    }
+
     private String assembleDefectDescription() {
-        List<String> descriptionParts = 
-                Lists.newArrayListWithCapacity(defectDescription.getTextFragmentOrParameterFragment().size());
+        List<String> descriptionParts =
+            Lists.newArrayListWithCapacity(defectDescription.getTextFragmentOrParameterFragment()
+                .size());
 
         for (Object fragment : defectDescription.getTextFragmentOrParameterFragment()) {
-            if (fragment.isParameterFragment()) {
+            if (isParameterFragment(fragment)) {
                 descriptionParts.add(parameterFragmentAsString((ParameterFragment) fragment));
-            } else {
-                 descriptionParts.add(CharMatcher.WHITESPACE.collapseFrom((String) fragment, ' ').trim());
+            }
+            else {
+                descriptionParts.add(CharMatcher.WHITESPACE.collapseFrom((String) fragment, ' ')
+                    .trim());
             }
         }
@@ -55,12 +96,29 @@
     }
 
+    private boolean isParameterFragment(Object object) {
+        return object instanceof ParameterFragment;
+    }
+
     private String parameterFragmentAsString(ParameterFragment fragment) {
-        String value = descriptionParametersValues.getValueOrEmptyString(fragment.getParameterName());
+        String value =
+            getValueOrEmptyString(descriptionParametersValues, fragment.getParameterName());
         if (StringUtils.isNotEmpty(value)) {
             return value;
-        } else {
-            throw new IllegalArgumentException(format("required parameter \"%s\" for usability defect description not provided", fragment.getParameterName()));
+        }
+        else {
+            throw new IllegalArgumentException(
+                                               format("required parameter \"%s\" for usability defect description not provided",
+                                                      fragment.getParameterName()));
         }
     }
 
+    private String getValueOrEmptyString(Map<String, String> stringKeyValueMap, String key) {
+        return stringKeyValueMap != null && stringKeyValueMap.containsKey(key) ? stringKeyValueMap
+            .get(key) : StringUtils.EMPTY;
+    }
+
+    public UsabilityDefectSeverityLevel getSeverityLevel() {
+        return severityLevel;
+    }
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectDescriptionResolver.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectDescriptionResolver.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectDescriptionResolver.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.result;
 
@@ -4,4 +18,11 @@
 import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public interface UsabilityDefectDescriptionResolver {
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectFactory.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectFactory.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectFactory.java	(revision 1040)
@@ -1,2 +1,15 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
 
 package de.ugoe.cs.autoquest.usability.evaluation.result;
@@ -6,8 +19,19 @@
 import de.ugoe.cs.autoquest.usability.DefectDescription;
 import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
-import lombok.AllArgsConstructor;
 
-@AllArgsConstructor
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class UsabilityDefectFactory {
+
+    public UsabilityDefectFactory(UsabilityDefectDescriptionResolver usabilityDefectDescriptionResolver)
+    {
+        super();
+        this.usabilityDefectDescriptionResolver = usabilityDefectDescriptionResolver;
+    }
 
     private final UsabilityDefectDescriptionResolver usabilityDefectDescriptionResolver;
@@ -15,5 +39,6 @@
     public UsabilityDefect createUsabilityGuidlineRecommendation(UsabilityDefectSeverityLevel recommendationSeverityLevel,
                                                                  UsabilityRule usabilityRule,
-                                                                 Map<String, String> recommendationMessageParameteValues) {
+                                                                 Map<String, String> recommendationMessageParameteValues)
+    {
         DefectDescription guidlineDescription =
             usabilityDefectDescriptionResolver.descriptionFor(usabilityRule);
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectSeverityLevel.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectSeverityLevel.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectSeverityLevel.java	(revision 1040)
@@ -1,7 +1,28 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.result;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public enum UsabilityDefectSeverityLevel {
 
     INFO, LOW, MEDIUM, HIGH;
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectXmlDescriptionResolver.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectXmlDescriptionResolver.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/result/UsabilityDefectXmlDescriptionResolver.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.result;
 
@@ -16,20 +30,27 @@
 import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRule;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class UsabilityDefectXmlDescriptionResolver implements UsabilityDefectDescriptionResolver {
-    
+
     private static final String DEFAULT_MESSAGES_FILE = "defectDescriptions_en.xml";
-    
-    private static final UsabilityDefectXmlDescriptionResolver instance = new UsabilityDefectXmlDescriptionResolver();
-    
+
+    private static final UsabilityDefectXmlDescriptionResolver instance =
+        new UsabilityDefectXmlDescriptionResolver();
+
     private DefectDescriptions defectDescriptions;
-    
+
     private UsabilityDefectXmlDescriptionResolver() {
         loadDescriptions();
     }
-    
+
     @SuppressWarnings("unchecked")
     private void loadDescriptions() {
-        InputStream inputStream =
-                ClassLoader.getSystemResourceAsStream(DEFAULT_MESSAGES_FILE);
+        InputStream inputStream = ClassLoader.getSystemResourceAsStream(DEFAULT_MESSAGES_FILE);
         try {
             String packageName = DefectDescriptions.class.getPackage().getName();
@@ -38,10 +59,8 @@
 
             defectDescriptions =
-                ((JAXBElement<DefectDescriptions>) unmarshaller.unmarshal(inputStream))
-                    .getValue();
+                ((JAXBElement<DefectDescriptions>) unmarshaller.unmarshal(inputStream)).getValue();
         }
         catch (Exception e) {
-            throw new RuntimeException
-                ("error while initializing usability defect descriptions", e);
+            throw new RuntimeException("error while initializing usability defect descriptions", e);
         }
         finally {
@@ -56,5 +75,5 @@
         }
     }
-    
+
     public static UsabilityDefectXmlDescriptionResolver instance() {
         return instance;
@@ -63,15 +82,19 @@
     @Override
     public DefectDescription descriptionFor(final UsabilityRule usabilityRule) {
-        Optional<DefectDescription> guidlineDescription = Iterables.tryFind(defectDescriptions.getDefectDescription(), new Predicate<DefectDescription>() {
-            
-            public boolean apply(DefectDescription defectDescription) {
-                return usabilityRule.ruleIdentifier().equals(defectDescription.getDefectId());
-            }
-            
-        });
-        if(!guidlineDescription.isPresent())
-            throw new RuntimeException
-            ("error while initializing usability defect descriptions. No " +
-                    "description text available for description " + usabilityRule.ruleIdentifier());
+        Optional<DefectDescription> guidlineDescription =
+            Iterables.tryFind(defectDescriptions.getDefectDescription(),
+                              new Predicate<DefectDescription>() {
+
+                                  public boolean apply(DefectDescription defectDescription) {
+                                      return usabilityRule.ruleIdentifier()
+                                          .equals(defectDescription.getDefectId());
+                                  }
+
+                              });
+        if (!guidlineDescription.isPresent())
+            throw new RuntimeException(
+                                       "error while initializing usability defect descriptions. No " +
+                                           "description text available for description " +
+                                           usabilityRule.ruleIdentifier());
         return guidlineDescription.get();
     }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/NoLetterOrDigitTextInputsEvaluator.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/NoLetterOrDigitTextInputsEvaluator.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/NoLetterOrDigitTextInputsEvaluator.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
 
@@ -16,7 +30,16 @@
 import de.ugoe.cs.autoquest.usability.tasktree.filter.TaskTreeFilter;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class NoLetterOrDigitTextInputsEvaluator extends RuleEvaluator {
 
-    public NoLetterOrDigitTextInputsEvaluator(UsabilityRule evaluatedUsabilityRule, ITaskTree taskTree) {
+    public NoLetterOrDigitTextInputsEvaluator(UsabilityRule evaluatedUsabilityRule,
+                                              ITaskTree taskTree)
+    {
         super(evaluatedUsabilityRule, taskTree);
     }
@@ -25,28 +48,34 @@
     protected FilterStatistic nodesUnderEvaluation(ITaskTree taskTree) {
         Optional<FilterStatistic> cachedNodes = loadFromCache(TEXT_INPUT);
-        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree, TEXT_INPUT);
+        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree,
+                                                                                 TEXT_INPUT);
     }
-    
+
     @Override
     protected FilterStatistic extractNodesFromTaskTree(ITaskTree taskTree) {
-        return new TaskTreeFilter(new IterativeDFSFilterStrategy())
-            .filterByEventType(TEXT_INPUT).from(taskTree);
+        return new TaskTreeFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT)
+            .from(taskTree);
     }
 
     @Override
     protected float calculateEvaluationMetric() {
-        Multiset<String> enteredTextFragments = aggregateEnteredTextFromTextInputs(this.filteredNodes.nodesMatchedFilter());
+        Multiset<String> enteredTextFragments =
+            aggregateEnteredTextFromTextInputs(this.filteredNodes.nodesMatchedFilter());
         int allCharactersCount = 0;
         int noLetterOrDigitCount = 0;
-        for(String textFragment : enteredTextFragments.elementSet()) {
+        for (String textFragment : enteredTextFragments.elementSet()) {
             int occurencesOfTextFragment = enteredTextFragments.count(textFragment);
             allCharactersCount += CharMatcher.ANY.countIn(textFragment) * occurencesOfTextFragment;
-            noLetterOrDigitCount += CharMatcher.forPredicate(characterIsLetterOrDigitPredicate()).countIn(textFragment) * occurencesOfTextFragment;
+            noLetterOrDigitCount +=
+                CharMatcher.forPredicate(characterIsLetterOrDigitPredicate()).countIn(textFragment) *
+                    occurencesOfTextFragment;
         }
-        return allCharactersCount != 0 ? (float) noLetterOrDigitCount / (float) allCharactersCount : 0;
+        return allCharactersCount != 0 ? (float) noLetterOrDigitCount / (float) allCharactersCount
+            : 0;
     }
 
     @Override
-    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric) {
+    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric)
+    {
         Optional<UsabilityDefectSeverityLevel> recommendationSeverityLevel = Optional.absent();
         if (evaluationMetric > 0.1) // every 10th sign
@@ -68,4 +97,4 @@
         return recommendationSeverityLevel;
     }
- 
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/RuleEvaluator.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/RuleEvaluator.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/RuleEvaluator.java	(revision 1040)
@@ -1,2 +1,15 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
 
 package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
@@ -17,4 +30,11 @@
 import de.ugoe.cs.autoquest.usability.tasktree.filter.TaskTreeNodeFilter;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public abstract class RuleEvaluator {
 
@@ -38,5 +58,6 @@
 
     @SuppressWarnings("rawtypes")
-    protected FilterStatistic cacheAndReturnNodes(ITaskTree taskTree, TaskTreeNodeFilter nodeFilter) {
+    protected FilterStatistic cacheAndReturnNodes(ITaskTree taskTree, TaskTreeNodeFilter nodeFilter)
+    {
         FilterStatistic textInputEvents = extractNodesFromTaskTree(taskTree);
         FilterStatisticCache.instance().addFilterStatistic(nodeFilter, textInputEvents);
@@ -52,6 +73,5 @@
             determineSeverityLevel(evaluationMetric);
         if (severityLevel.isPresent()) {
-            ruleEvaluationResult =
-                Optional.of(createRuleEvaluationResult(severityLevel.get()));
+            ruleEvaluationResult = Optional.of(createRuleEvaluationResult(severityLevel.get()));
         }
         return ruleEvaluationResult;
@@ -59,5 +79,5 @@
 
     protected abstract float calculateEvaluationMetric();
-    
+
     protected void storeEvaluationMetricForDefectDescription(String key, String value) {
         defectDescriptionMessageParameterValues.put(key, value);
@@ -66,8 +86,8 @@
     protected abstract Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric);
 
-    public UsabilityDefect createRuleEvaluationResult(UsabilityDefectSeverityLevel severityLevelOfDefect) {
+    public UsabilityDefect createRuleEvaluationResult(UsabilityDefectSeverityLevel severityLevelOfDefect)
+    {
         return new UsabilityDefectFactory(UsabilityDefectXmlDescriptionResolver.instance())
-            .createUsabilityGuidlineRecommendation(severityLevelOfDefect,
-                                                   evaluatedUsabilityRule,
+            .createUsabilityGuidlineRecommendation(severityLevelOfDefect, evaluatedUsabilityRule,
                                                    defectDescriptionMessageParameterValues);
     }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputEntryRepetitionsEvaluator.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputEntryRepetitionsEvaluator.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputEntryRepetitionsEvaluator.java	(revision 1040)
@@ -1,6 +1,21 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
 
 import static de.ugoe.cs.autoquest.usability.tasktree.filter.EventTypeFilter.TEXT_INPUT;
 import static de.ugoe.cs.autoquest.usability.util.TextInputUtil.aggregateEnteredTextFromTextInputs;
+import static java.lang.String.format;
 
 import com.google.common.base.Optional;
@@ -16,7 +31,16 @@
 import de.ugoe.cs.autoquest.usability.tasktree.filter.TaskTreeFilter;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class TextInputEntryRepetitionsEvaluator extends RuleEvaluator {
 
-    public TextInputEntryRepetitionsEvaluator(UsabilityRule evaluatedUsabilityRule, ITaskTree taskTree) {
+    public TextInputEntryRepetitionsEvaluator(UsabilityRule evaluatedUsabilityRule,
+                                              ITaskTree taskTree)
+    {
         super(evaluatedUsabilityRule, taskTree);
     }
@@ -25,37 +49,52 @@
     protected FilterStatistic nodesUnderEvaluation(ITaskTree taskTree) {
         Optional<FilterStatistic> cachedNodes = loadFromCache(TEXT_INPUT);
-        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree, TEXT_INPUT);
+        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree,
+                                                                                 TEXT_INPUT);
     }
-    
+
     @Override
     protected FilterStatistic extractNodesFromTaskTree(ITaskTree taskTree) {
-        return new TaskTreeFilter(new IterativeDFSFilterStrategy())
-            .filterByEventType(TEXT_INPUT).from(taskTree);
+        return new TaskTreeFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT)
+            .from(taskTree);
     }
 
     @Override
     protected float calculateEvaluationMetric() {
-        Multiset<String> enteredTextFragments = aggregateEnteredTextFromTextInputs(this.filteredNodes.nodesMatchedFilter());
-        Multiset<String> orderedTextFragmentsWithMultipleOccurences = onlyTextFragmentsWithMultipleOccurences(enteredTextFragments);
-        if(orderedTextFragmentsWithMultipleOccurences.isEmpty()) return 0;
-        String wordWithHighestRepetitionInTextFragments = orderedTextFragmentsWithMultipleOccurences.iterator().next();
+        Multiset<String> enteredTextFragments =
+            aggregateEnteredTextFromTextInputs(this.filteredNodes.nodesMatchedFilter());
+        Multiset<String> orderedTextFragmentsWithMultipleOccurences =
+            onlyTextFragmentsWithMultipleOccurences(enteredTextFragments);
+        if (orderedTextFragmentsWithMultipleOccurences.isEmpty())
+            return 0;
+        String wordWithHighestRepetitionInTextFragments =
+            orderedTextFragmentsWithMultipleOccurences.iterator().next();
         int numberOfRepeatedWords = orderedTextFragmentsWithMultipleOccurences.entrySet().size();
-        int maxRepetitions = orderedTextFragmentsWithMultipleOccurences.count(wordWithHighestRepetitionInTextFragments);
+        int maxRepetitions =
+            orderedTextFragmentsWithMultipleOccurences
+                .count(wordWithHighestRepetitionInTextFragments);
+        storeEvaluationMetricForDefectDescription("textRepetitionRatio",
+                                                  format("textRepetitionRatio %s repeated tokens, up to %s repetitions per token",
+                                                         numberOfRepeatedWords, maxRepetitions));
         return Math.max(numberOfRepeatedWords, maxRepetitions);
     }
-    
-    private Multiset<String> onlyTextFragmentsWithMultipleOccurences(final Multiset<String> allTextInputs) {
-        return Multisets.copyHighestCountFirst(Multisets.filter(allTextInputs, new Predicate<String>() {
-            
-            @Override
-            public boolean apply(String word) {
-                return allTextInputs.count(word) > 1;
-            }
-            
-        }));
+
+    private Multiset<String> onlyTextFragmentsWithMultipleOccurences(final Multiset<String> allTextInputs)
+    {
+        return Multisets.copyHighestCountFirst(Multisets.filter(allTextInputs,
+                                                                new Predicate<String>() {
+
+                                                                    @Override
+                                                                    public boolean apply(String word)
+                                                                    {
+                                                                        return allTextInputs
+                                                                            .count(word) > 1;
+                                                                    }
+
+                                                                }));
     }
 
     @Override
-    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric) {
+    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric)
+    {
         Optional<UsabilityDefectSeverityLevel> recommendationSeverityLevel = Optional.absent();
         if (evaluationMetric > 10) {
@@ -73,4 +112,4 @@
         return recommendationSeverityLevel;
     }
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputRatioEvaluator.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputRatioEvaluator.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/evaluator/TextInputRatioEvaluator.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator;
 
@@ -15,4 +29,11 @@
 import de.ugoe.cs.autoquest.usability.tasktree.filter.TaskTreeFilter;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class TextInputRatioEvaluator extends RuleEvaluator {
 
@@ -24,10 +45,12 @@
     protected FilterStatistic nodesUnderEvaluation(ITaskTree taskTree) {
         Optional<FilterStatistic> cachedNodes = loadFromCache(TEXT_INPUT);
-        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree, TEXT_INPUT);
+        return cachedNodes.isPresent() ? cachedNodes.get() : cacheAndReturnNodes(taskTree,
+                                                                                 TEXT_INPUT);
     }
 
     @Override
     protected FilterStatistic extractNodesFromTaskTree(ITaskTree taskTree) {
-        return new TaskTreeFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT).from(taskTree);
+        return new TaskTreeFilter(new IterativeDFSFilterStrategy()).filterByEventType(TEXT_INPUT)
+            .from(taskTree);
     }
 
@@ -38,19 +61,20 @@
         return textInputEvents / (textInputEvents + nonTextInputEvents);
     }
-    
+
     private int nrOfEventNodesNotMatchedFilter() {
-        return Iterables.size(
-            Iterables.filter(this.filteredNodes.nodesNotMatchedFilter(), new Predicate<ITaskTreeNode>() {
-            
-                @Override
-                public boolean apply(ITaskTreeNode node) {
-                    return  (node.getChildren() == null) || (node.getChildren().size() == 0);
-                }
-            })
-        );
+        return Iterables.size(Iterables.filter(this.filteredNodes.nodesNotMatchedFilter(),
+                                               new Predicate<ITaskTreeNode>() {
+
+                                                   @Override
+                                                   public boolean apply(ITaskTreeNode node) {
+                                                       return (node.getChildren() == null) ||
+                                                           (node.getChildren().size() == 0);
+                                                   }
+                                               }));
     }
 
     @Override
-    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric) {
+    protected Optional<UsabilityDefectSeverityLevel> determineSeverityLevel(float evaluationMetric)
+    {
         Optional<UsabilityDefectSeverityLevel> recommendationSeverityLevel = Optional.absent();
         if (evaluationMetric > 0.9) {
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/EmptyUsabilityRuleset.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/EmptyUsabilityRuleset.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/EmptyUsabilityRuleset.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
 
@@ -10,8 +24,15 @@
 import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class EmptyUsabilityRuleset implements UsabilityRuleset {
-    
+
     private enum EmptyUsabilityRule implements UsabilityRule {
-	;
+        ;
 
         @Override
@@ -26,11 +47,11 @@
 
     }
-    
-    private final EnumSet<EmptyUsabilityRule> EMPTY_USABILITY_RULESET = 
-	    EnumSet.noneOf(EmptyUsabilityRule.class);
+
+    private final EnumSet<EmptyUsabilityRule> EMPTY_USABILITY_RULESET = EnumSet
+        .noneOf(EmptyUsabilityRule.class);
 
     @Override
     public EnumSet<? extends UsabilityRule> evaluationRules() {
-	return EMPTY_USABILITY_RULESET;
+        return EMPTY_USABILITY_RULESET;
     }
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/MouseInteractionUsabilityRuleset.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/MouseInteractionUsabilityRuleset.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/MouseInteractionUsabilityRuleset.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
 
@@ -8,8 +22,15 @@
 import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class MouseInteractionUsabilityRuleset implements UsabilityRuleset {
 
     private enum MouseInteractionUsabilityRule implements UsabilityRule {
-        
+
         MOUSE_INTERACTION {
 
@@ -25,13 +46,13 @@
                 return this.name();
             }
-            
+
         };
 
         public abstract Optional<UsabilityDefect> evaluate(ITaskTree taskTree);
     }
-    
-    private final EnumSet<MouseInteractionUsabilityRule> MOUSE_INTERACTION_USABILITY_RULESET = EnumSet
-            .allOf(MouseInteractionUsabilityRule.class);
-    
+
+    private final EnumSet<MouseInteractionUsabilityRule> MOUSE_INTERACTION_USABILITY_RULESET =
+        EnumSet.allOf(MouseInteractionUsabilityRule.class);
+
     @Override
     public EnumSet<? extends UsabilityRule> evaluationRules() {
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/RulesetFactory.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/RulesetFactory.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/RulesetFactory.java	(revision 1040)
@@ -1,18 +1,39 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
+public class RulesetFactory {
 
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class RulesetFactory {
-    
+    private RulesetFactory() {
+        // no instantiation allowed
+    }
+
     public static EmptyUsabilityRuleset emptyUsabilityRuleset() {
-	return new EmptyUsabilityRuleset();
+        return new EmptyUsabilityRuleset();
     }
-    
+
     public static TextInputUsabiliyRuleset textInputUsabiliyRuleset() {
-	return new TextInputUsabiliyRuleset();
+        return new TextInputUsabiliyRuleset();
     }
-    
+
     public static MouseInteractionUsabilityRuleset mouseInteractionUsabiliyRuleset() {
         return new MouseInteractionUsabilityRuleset();
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/TextInputUsabiliyRuleset.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/TextInputUsabiliyRuleset.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/TextInputUsabiliyRuleset.java	(revision 1040)
@@ -1,2 +1,15 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
 
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
@@ -12,4 +25,11 @@
 import de.ugoe.cs.autoquest.usability.evaluation.rule.evaluator.TextInputRatioEvaluator;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class TextInputUsabiliyRuleset implements UsabilityRuleset {
 
@@ -17,5 +37,5 @@
 
         TEXT_FIELD_INPUT_RATIO {
-            
+
             @Override
             public Optional<UsabilityDefect> evaluate(ITaskTree taskTree) {
@@ -56,7 +76,6 @@
             }
 
+        };
 
-        };
-        
         public abstract Optional<UsabilityDefect> evaluate(ITaskTree taskTree);
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRule.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRule.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRule.java	(revision 1040)
@@ -1,2 +1,16 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
 
@@ -6,8 +20,15 @@
 import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public interface UsabilityRule {
-    
+
     public String ruleIdentifier();
-    
+
     public Optional<UsabilityDefect> evaluate(ITaskTree taskTree);
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRuleset.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRuleset.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/evaluation/rule/set/UsabilityRuleset.java	(revision 1040)
@@ -1,10 +1,30 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
 package de.ugoe.cs.autoquest.usability.evaluation.rule.set;
 
 import java.util.EnumSet;
 
-
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public interface UsabilityRuleset {
 
     public EnumSet<? extends UsabilityRule> evaluationRules();
-    
+
 }
