/* * Copyright (C) 2012 The Android Open Source Project * * 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 com.motorolamobility.preflighting.core.checker; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import com.motorolamobility.preflighting.core.IParameterProcessor; import com.motorolamobility.preflighting.core.applicationdata.ApplicationData; import com.motorolamobility.preflighting.core.checker.condition.ICondition; import com.motorolamobility.preflighting.core.checker.parameter.ICheckerParameter; import com.motorolamobility.preflighting.core.devicespecification.DeviceSpecification; import com.motorolamobility.preflighting.core.exception.PreflightingCheckerException; import com.motorolamobility.preflighting.core.validation.ValidationManagerConfiguration; import com.motorolamobility.preflighting.core.validation.ValidationResult; import com.motorolamobility.preflighting.core.validation.ValidationResultData; /** * This is the basic interface for Checkers. All Checkers must define an implementation of this Interface. * It can be used to keep common data among conditions and run common verifications before executing the conditions. * It is recommended to use the {@link Checker} class and override just the necessary methods instead of implementing this Interface. */ public interface IChecker extends IParameterProcessor { /** * Performs the validation. This method is called once for each {@link IChecker} that is configured to execute if * {@link IChecker#canExecute(ApplicationData, List)} method returns a {@link IStatus#OK}. * * @param data The {@link ApplicationData} containing all available information for the application being tested. * @param deviceSpecs The {@link List} containing all {@link DeviceSpecification} available to AppValidator * @param valManagerConfig {@link ValidationManagerConfiguration} containing the configuration for this validation. * @param checkerResults {@link ValidationResult} At the end of validation, {@link ValidationResultData} must be added to checkerResults. * @throws PreflightingCheckerException Exception thrown if there are any problems executing this validation. */ public void validateApplication(ApplicationData data, List<DeviceSpecification> deviceSpecs, ValidationManagerConfiguration valManagerConfig, ValidationResult checkerResults) throws PreflightingCheckerException; /** * Verifies is this Checker can be executed or not. * The idea here is to only return a non OK value if there's some invalid information on {@link ApplicationData}. * * @param data The {@link ApplicationData} containing all available information for the application being tested. * @param deviceSpecs The {@link List} containing all {@link DeviceSpecification} available to AppValidator * * @return Returns the status indicating whether the {@link IChecker} can be executed. Although * {@link IStatus} is returned, one must return its implementation: {@link MultiStatus}. * * @throws PreflightingCheckerException Exception thrown in case there is any problem executing * this validation. */ public IStatus canExecute(ApplicationData data, List<DeviceSpecification> deviceSpecs) throws PreflightingCheckerException; /** * Returns the {@link IChecker} unique identifier. * * @return The checker unique identifier. */ public String getId(); /** * Sets the {@link IChecker} unique identifier. * * @param id Returns the checker unique identifier. */ public void setId(String id); /** * Returns the conditions {@link ICondition} defined by the {@link IChecker}. * <br> * If the {@link IChecker} has no conditions, an empty {@link Map} must be returned. * * @return A {@link Map} that contains the condition IDs as keys and the condition objects associated with them. */ public Map<String, ICondition> getConditions(); /** * Set the conditions defined by the checker. Conditions are not mandatory, so setting conditions is optional. * * @param checkerConditions {@link Map} holding the conditions. Each condition is identified * by a {@link String}. */ public void setConditions(HashMap<String, ICondition> checkerConditions); /** * Gets the list of Parameters for this Condition. * * @return Returns the list of Parameters for this Condition. */ public Map<String, ICheckerParameter> getParameters(); /** * Sets the list of parameters for this condition. * * @param conditionParameters This list of Parameters for this Condition. */ public void setParameters(Map<String, ICheckerParameter> conditionParameters); /** * This method will be called right after execution. * All data used for this verification, which is stored in this class for some reason, must be cleared in order to reduce memory consumption. */ public void clean(); /** * @return true if this checker is set as enabled to run, false otherwise. */ public boolean isEnabled(); /** * Enables or disables the checker. * @param enabled true if enabled, false otherwise. */ public void setEnabled(boolean enabled); }