/*
 * 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.exception;

/**
 * Exception representing problem with interpreting input parameters.
 */
@SuppressWarnings("serial")
public class PreflightingParameterException extends PreflightingToolException
{
    /**
     * Instantiates the {@link PreflightingParameterException} providing
     * the error message which originated this exception.
     *     
     * @param message Error message which originated this exception.
     */
    public PreflightingParameterException(String message)
    {
        super(message);
    }
}
