// ========================================================================
// Copyright (c) Webtide LLC
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at 
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.apache.org/licenses/LICENSE-2.0.txt
//
// You may elect to redistribute this code under either of these licenses. 
// ========================================================================
package org.eclipse.jetty.deploy.standard;

import org.eclipse.jetty.deploy.AppLifeCycle;
import org.eclipse.jetty.deploy.AppLifeCycleEvent;
import org.eclipse.jetty.deploy.AppLifeCycle.Phase;
import org.eclipse.jetty.server.handler.ContextHandler;

/**
 * Default {@link AppLifeCycle.Phase#STOP} implementation.
 */
public class DefaultStopper extends DefaultAppLifeCycleAdapter
{
    @Override
    public void onLifeCyclePhase(AppLifeCycleEvent event) throws Exception
    {
        if (event.getLifeCyclePhase() == Phase.STOP)
        {
            ContextHandler handler = event.getApp().getContextHandler(event.getDeploymentManager());
            if (!handler.isStopped())
            {
                handler.stop();
            }
        }
    }
}
