Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationFacade.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationFacade.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationFacade.java	(revision 1040)
@@ -1,10 +1,20 @@
+//   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;
 
 import java.util.EnumSet;
 import java.util.List;
-
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.NoArgsConstructor;
 
 import com.google.common.base.Optional;
@@ -17,31 +27,46 @@
 import de.ugoe.cs.autoquest.usability.evaluation.rule.set.UsabilityRuleset;
 
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class UsabilityEvaluationFacade {
 
-    public static ExecuteUsabilityEvaluationStep applyUsabilityRuleset(UsabilityRuleset usabilityRuleset) {
-	Preconditions.checkNotNull(usabilityRuleset);
+    private UsabilityEvaluationFacade() {
+        // no instantiation allowed
+    }
+
+    public static ExecuteUsabilityEvaluationStep applyUsabilityRuleset(UsabilityRuleset usabilityRuleset)
+    {
+        Preconditions.checkNotNull(usabilityRuleset);
         return new ExecuteUsabilityEvaluationStep(usabilityRuleset);
     }
 
-    @AllArgsConstructor
     protected static class ExecuteUsabilityEvaluationStep {
-	
-	private final UsabilityRuleset usabilityRuleset;
 
-	public UsabilityEvaluationReport evaluateUsabilityOf(ITaskTree taskTree) {
-	    Preconditions.checkNotNull(taskTree);
-	    EnumSet<? extends UsabilityRule> evaluationRules = usabilityRuleset.evaluationRules();
-	    List<UsabilityDefect> evaluationResults = 
-		    Lists.newArrayListWithCapacity(evaluationRules.size());
-	    for(UsabilityRule usabilityRule : evaluationRules) {
-		Optional<UsabilityDefect> ruleEvaluationResult = usabilityRule.evaluate(taskTree);
-		if(ruleEvaluationResult.isPresent()) {
-		    evaluationResults.add(ruleEvaluationResult.get());
-		}
-	    }
-	    return UsabilityEvaluationReport.from(evaluationResults);
-	}
-	
+        protected ExecuteUsabilityEvaluationStep(UsabilityRuleset usabilityRuleset) {
+            super();
+            this.usabilityRuleset = usabilityRuleset;
+        }
+
+        private final UsabilityRuleset usabilityRuleset;
+
+        public UsabilityEvaluationReport evaluateUsabilityOf(ITaskTree taskTree) {
+            Preconditions.checkNotNull(taskTree);
+            EnumSet<? extends UsabilityRule> evaluationRules = usabilityRuleset.evaluationRules();
+            List<UsabilityDefect> evaluationResults =
+                Lists.newArrayListWithCapacity(evaluationRules.size());
+            for (UsabilityRule usabilityRule : evaluationRules) {
+                Optional<UsabilityDefect> ruleEvaluationResult = usabilityRule.evaluate(taskTree);
+                if (ruleEvaluationResult.isPresent()) {
+                    evaluationResults.add(ruleEvaluationResult.get());
+                }
+            }
+            return UsabilityEvaluationReport.from(evaluationResults);
+        }
+
     }
 
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationReport.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationReport.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/UsabilityEvaluationReport.java	(revision 1040)
@@ -1,8 +1,19 @@
+//   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;
 
 import java.util.List;
-
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
 
 import com.google.common.base.Preconditions;
@@ -10,17 +21,27 @@
 import de.ugoe.cs.autoquest.usability.evaluation.result.UsabilityDefect;
 
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class UsabilityEvaluationReport {
-    
+
     private List<UsabilityDefect> evaluationResults;
-    
+
+    private UsabilityEvaluationReport(List<UsabilityDefect> evaluationResults) {
+        this.evaluationResults = evaluationResults;
+    }
+
     public static UsabilityEvaluationReport from(List<UsabilityDefect> evaluationResults) {
-	Preconditions.checkNotNull(evaluationResults);
-	return new UsabilityEvaluationReport(evaluationResults);
+        Preconditions.checkNotNull(evaluationResults);
+        return new UsabilityEvaluationReport(evaluationResults);
     }
-    
+
     public List<UsabilityDefect> evaluationResults() {
         return this.evaluationResults;
     }
-    
+
 }
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();
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTargetFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTargetFilter.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTargetFilter.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.tasktree.filter;
 
@@ -11,12 +25,19 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public enum EventTargetFilter implements TaskTreeNodeFilter<IEventTarget> {
 
     TEXT_FIELD(ITextField.class),
-    
+
     TEXT_AREA(ITextArea.class);
-    
+
     private Class<? extends IEventTarget> eventTargetClazz;
-    
+
     private EventTargetFilter(Class<? extends IEventTarget> eventTargetClazz) {
         this.eventTargetClazz = eventTargetClazz;
@@ -37,8 +58,8 @@
         return Predicates.and(instanceOfIEventTaskPredicate, nodeHoldsInstanceOfFilterArgument);
     }
-    
+
     private Function<ITaskTreeNode, IEventTarget> nodeExtractionFunction() {
         return new Function<ITaskTreeNode, IEventTarget>() {
-            
+
             @Override
             public IEventTarget apply(ITaskTreeNode treeNode) {
@@ -47,4 +68,4 @@
         };
     }
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTypeFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTypeFilter.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/EventTypeFilter.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.tasktree.filter;
 
@@ -6,4 +20,5 @@
 
 import de.ugoe.cs.autoquest.eventcore.IEventType;
+import de.ugoe.cs.autoquest.eventcore.gui.IInteraction;
 import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonInteraction;
 import de.ugoe.cs.autoquest.eventcore.gui.MouseInteraction;
@@ -12,14 +27,23 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public enum EventTypeFilter implements TaskTreeNodeFilter<IEventType> {
+
+    MOUSE_BUTTON_INTERACTION(MouseButtonInteraction.class),
+    
+    MOUSE_INTERACTION(MouseInteraction.class),
     
     TEXT_INPUT(TextInput.class),
     
-    MOUSE_INTERACTION(MouseInteraction.class),
-    
-    MOUSE_BUTTON_INTERACTION(MouseButtonInteraction.class);
-    
+    USER_INTERACTION(IInteraction.class);
+
     private Class<? extends IEventType> eventTypeClazz;
-    
+
     private EventTypeFilter(Class<? extends IEventType> eventTypeClazz) {
         this.eventTypeClazz = eventTypeClazz;
@@ -31,5 +55,5 @@
         return (Class<IEventType>) eventTypeClazz;
     }
-    
+
     @SuppressWarnings("rawtypes")
     @Override
@@ -40,8 +64,8 @@
         return Predicates.and(instanceOfIEventTaskPredicate, nodeHoldsInstanceOfFilterArgument);
     }
-    
+
     private Function<ITaskTreeNode, IEventType> nodeExtractionFunction() {
         return new Function<ITaskTreeNode, IEventType>() {
-            
+
             @Override
             public IEventType apply(ITaskTreeNode treeNode) {
@@ -50,3 +74,3 @@
         };
     }
-    }
+}
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatistic.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatistic.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatistic.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.tasktree.filter;
 
@@ -4,46 +18,75 @@
 
 import com.google.common.base.Predicate;
+import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Multimap;
 
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class FilterStatistic {
-    
+
     @SuppressWarnings("rawtypes")
     private final Predicate filterPredicate;
 
     private List<ITaskTreeNode> filteredNodes = Lists.newArrayList();
-    
+
     private List<ITaskTreeNode> nodesNotMatchedFilter = Lists.newArrayList();
-    
+
     @SuppressWarnings("rawtypes")
     public FilterStatistic(Predicate filterPredicate) {
         this.filterPredicate = filterPredicate;
     }
-    
+
     @SuppressWarnings("unchecked")
     public void addNode(ITaskTreeNode node) {
         if (filterPredicate.apply(node)) {
             filteredNodes.add(node);
-        } else {
+        }
+        else {
             nodesNotMatchedFilter.add(node);
         }
     }
-    
+
     public List<ITaskTreeNode> nodesMatchedFilter() {
         return this.filteredNodes;
     }
-    
+
     public int nrOfNodesMatchedFilter() {
         return this.filteredNodes.size();
     }
-    
+
     public List<ITaskTreeNode> nodesNotMatchedFilter() {
         return this.nodesNotMatchedFilter;
     }
-    
+
     public int nrOfNodesNotMatchedFilter() {
         return this.nodesNotMatchedFilter.size();
     }
-    
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param eventTargetParent
+     * @return
+     */
+    public Multimap<IGUIElement, ITaskTreeNode> groupBy() {
+        Multimap<IGUIElement, ITaskTreeNode> groupedNodes = LinkedListMultimap.create();
+        for(ITaskTreeNode node : filteredNodes) {
+            IGUIElement eventTask = (IGUIElement) ((IEventTask) node).getEventTarget();
+            groupedNodes.put(eventTask.getParent(), node);
+        }
+        return groupedNodes;
+    }
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatisticCache.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatisticCache.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/FilterStatisticCache.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.tasktree.filter;
 
@@ -7,32 +21,39 @@
 import com.google.common.cache.CacheBuilder;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class FilterStatisticCache {
 
     private static final FilterStatisticCache instance = new FilterStatisticCache();
-    
+
     @SuppressWarnings("rawtypes")
     private Cache<TaskTreeNodeFilter, FilterStatistic> cache;
-    
+
     private FilterStatisticCache() {
         this.cache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();
     }
-    
+
     public static FilterStatisticCache instance() {
         return instance;
     }
-    
+
     @SuppressWarnings("rawtypes")
     public void addFilterStatistic(TaskTreeNodeFilter nodeFilter, FilterStatistic filterStatistic) {
         this.cache.put(nodeFilter, filterStatistic);
     }
-    
+
     @SuppressWarnings("rawtypes")
     public Optional<FilterStatistic> getFilterStatistic(TaskTreeNodeFilter nodeFilter) {
         return Optional.fromNullable(this.cache.getIfPresent(nodeFilter));
     }
-    
+
     public void clear() {
         this.cache.invalidateAll();
     }
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/IterativeDFSFilterStrategy.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/IterativeDFSFilterStrategy.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/IterativeDFSFilterStrategy.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.tasktree.filter;
 
@@ -10,8 +24,15 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class IterativeDFSFilterStrategy implements TaskTreeFilterStrategy {
-    
+
     private FilterStatistic filterStatistic;
-    
+
     @SuppressWarnings("unchecked")
     @Override
@@ -31,9 +52,18 @@
         return this.filterStatistic;
     }
-    
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public FilterStatistic filter(ITaskTree taskTree, TaskTreeNodeTypeFilter nodeType) {
+        Predicate<ITaskTreeNode> filterPredicate = nodeType.filterPredicate();
+        this.filterStatistic = new FilterStatistic(filterPredicate);
+        traverse(taskTree);
+        return this.filterStatistic;
+    }
+
     private void traverse(ITaskTree taskTree) {
         Stack<ITaskTreeNode> unvisitedNodes = new Stack<ITaskTreeNode>();
         unvisitedNodes.push(taskTree.getRoot());
-        while(stillUnvisitedNodes(unvisitedNodes)) {
+        while (stillUnvisitedNodes(unvisitedNodes)) {
             ITaskTreeNode node = unvisitedNodes.pop();
             processCurrentNode(node);
@@ -49,8 +79,9 @@
         this.filterStatistic.addNode(node);
     }
-    
+
     private void processChildrenOfCurrentNode(Stack<ITaskTreeNode> unvisitedNodes,
-                                              ITaskTreeNode node) {
-        for(ITaskTreeNode child : node.getChildren()) {
+                                              ITaskTreeNode node)
+    {
+        for (ITaskTreeNode child : node.getChildren()) {
             unvisitedNodes.push(child);
         }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilter.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilter.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.tasktree.filter;
@@ -6,8 +19,15 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class TaskTreeFilter {
-    
+
     private final TaskTreeFilterStrategy taskTreeFilterStrategy;
-    
+
     public TaskTreeFilter(TaskTreeFilterStrategy treeTraversalStrategy) {
         Preconditions.checkNotNull(treeTraversalStrategy);
@@ -21,4 +41,8 @@
     public FilterEventTypeStep filterByEventType(EventTypeFilter eventType) {
         return new FilterEventTypeStep(eventType);
+    }
+
+    public FilterNodeTypeStep filterByNodeType(TaskTreeNodeTypeFilter nodeType) {
+        return new FilterNodeTypeStep(nodeType);
     }
 
@@ -50,3 +74,17 @@
 
     }
+
+    public class FilterNodeTypeStep {
+
+        private final TaskTreeNodeTypeFilter nodeType;
+
+        public FilterNodeTypeStep(TaskTreeNodeTypeFilter nodeType) {
+            this.nodeType = nodeType;
+        }
+
+        public FilterStatistic from(ITaskTree taskTree) {
+            return taskTreeFilterStrategy.filter(taskTree, nodeType);
+        }
+
+    }
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilterStrategy.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilterStrategy.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeFilterStrategy.java	(revision 1040)
@@ -1,6 +1,27 @@
+//   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.tasktree.filter;
 
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public interface TaskTreeFilterStrategy {
 
@@ -8,4 +29,6 @@
 
     public FilterStatistic filter(ITaskTree taskTree, EventTypeFilter eventType);
-  
+
+    public FilterStatistic filter(ITaskTree taskTree, TaskTreeNodeTypeFilter nodeType);
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeNodeFilter.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeNodeFilter.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/tasktree/filter/TaskTreeNodeFilter.java	(revision 1040)
@@ -1,12 +1,33 @@
+//   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.tasktree.filter;
 
 import com.google.common.base.Predicate;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public interface TaskTreeNodeFilter<T> {
 
     public Class<T> clazz();
-    
+
     @SuppressWarnings("rawtypes")
     public Predicate filterPredicate();
-    
+
 }
Index: trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.java
===================================================================
--- trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.java	(revision 1036)
+++ trunk/autoquest-core-usability-evaluation/src/main/java/de/ugoe/cs/autoquest/usability/util/TextInputUtil.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.util;
 
@@ -15,9 +29,21 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
 
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Alexander Deicke
+ */
 public class TextInputUtil {
-    
-    public static Multiset<String> aggregateEnteredTextFromTextInputs(List<ITaskTreeNode> nodesWithTextInputEvents) {
+
+    private TextInputUtil() {
+        // util class
+    }
+
+    public static Multiset<String> aggregateEnteredTextFromTextInputs(List<ITaskTreeNode> nodesWithTextInputEvents)
+    {
         List<Iterable<String>> allTextInputs = Lists.newArrayList();
-        for(ITaskTreeNode nodeWithTextInput : nodesWithTextInputEvents) {
+        for (ITaskTreeNode nodeWithTextInput : nodesWithTextInputEvents) {
             TextInput textInput = (TextInput) ((IEventTask) nodeWithTextInput).getEventType();
             allTextInputs.add(splitTextIntoWordsAndSigns(textInput.getEnteredText()));
@@ -25,32 +51,38 @@
         return HashMultiset.create(Iterables.concat(allTextInputs));
     }
-    
+
     public static Iterable<String> splitTextIntoWordsAndSigns(String enteredText) {
-        CharMatcher onlyWords = CharMatcher.WHITESPACE.or(CharMatcher.forPredicate(characterIsJavaIdentifierPartPredicate()));
-        CharMatcher onlySigns = CharMatcher.WHITESPACE.or(CharMatcher.forPredicate(characterIsJavaIdentifierPartPredicate()).negate());
-        Iterable<String> words = Splitter.on(onlyWords).omitEmptyStrings().trimResults().split(enteredText);
-        Iterable<String> signs = Splitter.on(onlySigns).omitEmptyStrings().trimResults().split(enteredText);
+        CharMatcher onlyWords =
+            CharMatcher.WHITESPACE.or(CharMatcher
+                .forPredicate(characterIsJavaIdentifierPartPredicate()));
+        CharMatcher onlySigns =
+            CharMatcher.WHITESPACE.or(CharMatcher
+                .forPredicate(characterIsJavaIdentifierPartPredicate()).negate());
+        Iterable<String> words =
+            Splitter.on(onlyWords).omitEmptyStrings().trimResults().split(enteredText);
+        Iterable<String> signs =
+            Splitter.on(onlySigns).omitEmptyStrings().trimResults().split(enteredText);
         return Iterables.concat(words, signs);
     }
-    
+
     public static Predicate<Character> characterIsJavaIdentifierPartPredicate() {
         return new Predicate<Character>() {
-            
+
             @Override
             public boolean apply(Character character) {
-               return  !Character.isJavaIdentifierPart(character);
+                return !Character.isJavaIdentifierPart(character);
             }
-            
+
         };
     }
-    
+
     public static Predicate<Character> characterIsLetterOrDigitPredicate() {
         return new Predicate<Character>() {
-            
+
             @Override
             public boolean apply(Character character) {
                 return !Character.isLetterOrDigit(character);
             }
-            
+
         };
     }
