// 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.result; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.EnumMap; import java.util.Map; import java.util.Map.Entry; import jodd.props.Props; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import de.ugoe.cs.util.console.Console; /** *
* Helper class, which creates a {@link UsabilityProblemDescription} for a usability rule. *
* * @author Alexander Deicke */ public class UsabilityProblemDescriptionResolver { /** ** .properties file, which contains all details concerning a usability defect. *
*/ private final String defectDescriptionFile = "defects.props"; /** ** Creates a defect description for a {@link UsabilityRule}. *
* * @param name * of usability rule * @return defect description for usability rule */ public UsabilityProblemDescription descriptionFor(String usabilityRuleName) { Props allProperties = initProperties(); Map* Initializes the properties, which are used to create the defect description. *
* * @return properties needed to create defect description */ private Props initProperties() { Optional* Loads the .properties file from the system. *
* * @return iff present, {@link File} object of the .properties file */ private Optional* Loads the values from the .properties. *
* * @param defectDescriptionFile * .properties file * @param props * object, which stores the loaded values */ private void loadProperties(Optional* Returns all existing properties for a given usability rule. *
* * @param allProperties * all properties available * @param usabilityRuleName * name of usability rule * @return all properties of certain usability rule */ private Map* Creates the usability defect. *
* * @param usabilityRuleProperties * all properties needed for creation. * @return defect description for a usability rule */ private UsabilityProblemDescription createUsabilityDefect(Map* Gets the description property. *
* * @return description property */ private Predicate* Creates severity level map for defect description, by matching all entried from .properties * file to corresponding {@link UsabilityProblemSeverityLevel}. *
* * @param usabilityRuleProperties * all properties of certain usability rule * @return assignment of {@link UsabilityProblemSeverityLevel} and corresponding threshold */ private EnumMap* Matches severity level from .properties file against {@link UsabilityProblemSeverityLevel}. *
* * @param severityProperty * severity level from .properties file * @return matching {@link UsabilityProblemSeverityLevel} */ private UsabilityProblemSeverityLevel getSeverityLevel(String severityProperty) { int startSeverityLevel = severityProperty.lastIndexOf(".") + 1; String severityLevelIdentifier = severityProperty.substring(startSeverityLevel).toUpperCase(); return UsabilityProblemSeverityLevel.valueOf(severityLevelIdentifier); } /** ** Gets the severity level properties. *
* * @return severity level */ private Predicate