package org.apache.maven.lifecycle;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

/**
 * Signals a failure to locate the lifecycle for some phase.
 *
 * @author Benjamin Bentmann
 */
public class LifecyclePhaseNotFoundException
    extends Exception
{

    private final String lifecyclePhase;

    /**
     * Creates a new exception to indicate that the specified lifecycle phase is not defined by any known lifecycle.
     *
     * @param message The detail message, may be {@code null}.
     * @param lifecyclePhase The name of the lifecycle phase that could not be located, may be {@code null}.
     */
    public LifecyclePhaseNotFoundException( String message, String lifecyclePhase )
    {
        super( message );
        this.lifecyclePhase = ( lifecyclePhase != null ) ? lifecyclePhase : "";
    }

    /**
     * Gets the lifecycle phase that was not found.
     *
     * @return The lifecycle phase that was not found, never {@code null}.
     */
    public String getLifecyclePhase()
    {
        return lifecyclePhase;
    }

}
