103928aee4356845252ac6b662d5c72c29903813eJake Slack//
203928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
303928aee4356845252ac6b662d5c72c29903813eJake Slack//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
403928aee4356845252ac6b662d5c72c29903813eJake Slack//  ------------------------------------------------------------------------
503928aee4356845252ac6b662d5c72c29903813eJake Slack//  All rights reserved. This program and the accompanying materials
603928aee4356845252ac6b662d5c72c29903813eJake Slack//  are made available under the terms of the Eclipse Public License v1.0
703928aee4356845252ac6b662d5c72c29903813eJake Slack//  and Apache License v2.0 which accompanies this distribution.
803928aee4356845252ac6b662d5c72c29903813eJake Slack//
903928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Eclipse Public License is available at
1003928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.eclipse.org/legal/epl-v10.html
1103928aee4356845252ac6b662d5c72c29903813eJake Slack//
1203928aee4356845252ac6b662d5c72c29903813eJake Slack//      The Apache License v2.0 is available at
1303928aee4356845252ac6b662d5c72c29903813eJake Slack//      http://www.opensource.org/licenses/apache2.0.php
1403928aee4356845252ac6b662d5c72c29903813eJake Slack//
1503928aee4356845252ac6b662d5c72c29903813eJake Slack//  You may elect to redistribute this code under either of these licenses.
1603928aee4356845252ac6b662d5c72c29903813eJake Slack//  ========================================================================
1703928aee4356845252ac6b662d5c72c29903813eJake Slack//
1803928aee4356845252ac6b662d5c72c29903813eJake Slack
1903928aee4356845252ac6b662d5c72c29903813eJake Slackpackage org.eclipse.jetty.server.handler.jmx;
2003928aee4356845252ac6b662d5c72c29903813eJake Slack
2103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.IOException;
2203928aee4356845252ac6b662d5c72c29903813eJake Slack
2303928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.jmx.ObjectMBean;
2403928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.Server;
2503928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.handler.AbstractHandler;
2603928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.handler.AbstractHandlerContainer;
2703928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.server.handler.ContextHandler;
2803928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.log.Log;
2903928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.log.Logger;
3003928aee4356845252ac6b662d5c72c29903813eJake Slack
3103928aee4356845252ac6b662d5c72c29903813eJake Slackpublic class AbstractHandlerMBean extends ObjectMBean
3203928aee4356845252ac6b662d5c72c29903813eJake Slack{
3303928aee4356845252ac6b662d5c72c29903813eJake Slack    private static final Logger LOG = Log.getLogger(AbstractHandlerMBean.class);
3403928aee4356845252ac6b662d5c72c29903813eJake Slack
3503928aee4356845252ac6b662d5c72c29903813eJake Slack    /* ------------------------------------------------------------ */
3603928aee4356845252ac6b662d5c72c29903813eJake Slack    public AbstractHandlerMBean(Object managedObject)
3703928aee4356845252ac6b662d5c72c29903813eJake Slack    {
3803928aee4356845252ac6b662d5c72c29903813eJake Slack        super(managedObject);
3903928aee4356845252ac6b662d5c72c29903813eJake Slack    }
4003928aee4356845252ac6b662d5c72c29903813eJake Slack
4103928aee4356845252ac6b662d5c72c29903813eJake Slack    /* ------------------------------------------------------------ */
4203928aee4356845252ac6b662d5c72c29903813eJake Slack    @Override
4303928aee4356845252ac6b662d5c72c29903813eJake Slack    public String getObjectContextBasis()
4403928aee4356845252ac6b662d5c72c29903813eJake Slack    {
4503928aee4356845252ac6b662d5c72c29903813eJake Slack        if (_managed != null )
4603928aee4356845252ac6b662d5c72c29903813eJake Slack        {
4703928aee4356845252ac6b662d5c72c29903813eJake Slack            String basis = null;
4803928aee4356845252ac6b662d5c72c29903813eJake Slack            if (_managed instanceof ContextHandler)
4903928aee4356845252ac6b662d5c72c29903813eJake Slack            {
5003928aee4356845252ac6b662d5c72c29903813eJake Slack                return null;
5103928aee4356845252ac6b662d5c72c29903813eJake Slack            }
5203928aee4356845252ac6b662d5c72c29903813eJake Slack            else if (_managed instanceof AbstractHandler)
5303928aee4356845252ac6b662d5c72c29903813eJake Slack            {
5403928aee4356845252ac6b662d5c72c29903813eJake Slack                AbstractHandler handler = (AbstractHandler)_managed;
5503928aee4356845252ac6b662d5c72c29903813eJake Slack                Server server = handler.getServer();
5603928aee4356845252ac6b662d5c72c29903813eJake Slack                if (server != null)
5703928aee4356845252ac6b662d5c72c29903813eJake Slack                {
5803928aee4356845252ac6b662d5c72c29903813eJake Slack                    ContextHandler context =
5903928aee4356845252ac6b662d5c72c29903813eJake Slack                        AbstractHandlerContainer.findContainerOf(server,
6003928aee4356845252ac6b662d5c72c29903813eJake Slack                                ContextHandler.class, handler);
6103928aee4356845252ac6b662d5c72c29903813eJake Slack
6203928aee4356845252ac6b662d5c72c29903813eJake Slack                    if (context != null)
6303928aee4356845252ac6b662d5c72c29903813eJake Slack                        basis = getContextName(context);
6403928aee4356845252ac6b662d5c72c29903813eJake Slack                }
6503928aee4356845252ac6b662d5c72c29903813eJake Slack            }
6603928aee4356845252ac6b662d5c72c29903813eJake Slack            if (basis != null)
6703928aee4356845252ac6b662d5c72c29903813eJake Slack                return basis;
6803928aee4356845252ac6b662d5c72c29903813eJake Slack        }
6903928aee4356845252ac6b662d5c72c29903813eJake Slack        return super.getObjectContextBasis();
7003928aee4356845252ac6b662d5c72c29903813eJake Slack    }
7103928aee4356845252ac6b662d5c72c29903813eJake Slack
7203928aee4356845252ac6b662d5c72c29903813eJake Slack    /* ------------------------------------------------------------ */
7303928aee4356845252ac6b662d5c72c29903813eJake Slack    @Override
7403928aee4356845252ac6b662d5c72c29903813eJake Slack    public String getObjectNameBasis()
7503928aee4356845252ac6b662d5c72c29903813eJake Slack    {
7603928aee4356845252ac6b662d5c72c29903813eJake Slack        if (_managed != null )
7703928aee4356845252ac6b662d5c72c29903813eJake Slack        {
7803928aee4356845252ac6b662d5c72c29903813eJake Slack            String name = null;
7903928aee4356845252ac6b662d5c72c29903813eJake Slack            if (_managed instanceof ContextHandler)
8003928aee4356845252ac6b662d5c72c29903813eJake Slack            {
8103928aee4356845252ac6b662d5c72c29903813eJake Slack                ContextHandler context = (ContextHandler)_managed;
8203928aee4356845252ac6b662d5c72c29903813eJake Slack                name = getContextName(context);
8303928aee4356845252ac6b662d5c72c29903813eJake Slack            }
8403928aee4356845252ac6b662d5c72c29903813eJake Slack
8503928aee4356845252ac6b662d5c72c29903813eJake Slack            if (name != null)
8603928aee4356845252ac6b662d5c72c29903813eJake Slack                return name;
8703928aee4356845252ac6b662d5c72c29903813eJake Slack        }
8803928aee4356845252ac6b662d5c72c29903813eJake Slack
8903928aee4356845252ac6b662d5c72c29903813eJake Slack        return super.getObjectNameBasis();
9003928aee4356845252ac6b662d5c72c29903813eJake Slack    }
9103928aee4356845252ac6b662d5c72c29903813eJake Slack
9203928aee4356845252ac6b662d5c72c29903813eJake Slack    /* ------------------------------------------------------------ */
9303928aee4356845252ac6b662d5c72c29903813eJake Slack    protected String getContextName(ContextHandler context)
9403928aee4356845252ac6b662d5c72c29903813eJake Slack    {
9503928aee4356845252ac6b662d5c72c29903813eJake Slack        String name = null;
9603928aee4356845252ac6b662d5c72c29903813eJake Slack
9703928aee4356845252ac6b662d5c72c29903813eJake Slack        if (context.getContextPath()!=null && context.getContextPath().length()>0)
9803928aee4356845252ac6b662d5c72c29903813eJake Slack        {
9903928aee4356845252ac6b662d5c72c29903813eJake Slack            int idx = context.getContextPath().lastIndexOf('/');
10003928aee4356845252ac6b662d5c72c29903813eJake Slack            name = idx < 0 ? context.getContextPath() : context.getContextPath().substring(++idx);
10103928aee4356845252ac6b662d5c72c29903813eJake Slack            if (name==null || name.length()==0)
10203928aee4356845252ac6b662d5c72c29903813eJake Slack                name= "ROOT";
10303928aee4356845252ac6b662d5c72c29903813eJake Slack        }
10403928aee4356845252ac6b662d5c72c29903813eJake Slack
10503928aee4356845252ac6b662d5c72c29903813eJake Slack        if (name==null && context.getBaseResource()!=null)
10603928aee4356845252ac6b662d5c72c29903813eJake Slack        {
10703928aee4356845252ac6b662d5c72c29903813eJake Slack            try
10803928aee4356845252ac6b662d5c72c29903813eJake Slack            {
10903928aee4356845252ac6b662d5c72c29903813eJake Slack                if (context.getBaseResource().getFile()!=null)
11003928aee4356845252ac6b662d5c72c29903813eJake Slack                    name = context.getBaseResource().getFile().getName();
11103928aee4356845252ac6b662d5c72c29903813eJake Slack            }
11203928aee4356845252ac6b662d5c72c29903813eJake Slack            catch(IOException e)
11303928aee4356845252ac6b662d5c72c29903813eJake Slack            {
11403928aee4356845252ac6b662d5c72c29903813eJake Slack                LOG.ignore(e);
11503928aee4356845252ac6b662d5c72c29903813eJake Slack                name=context.getBaseResource().getName();
11603928aee4356845252ac6b662d5c72c29903813eJake Slack            }
11703928aee4356845252ac6b662d5c72c29903813eJake Slack        }
11803928aee4356845252ac6b662d5c72c29903813eJake Slack
11903928aee4356845252ac6b662d5c72c29903813eJake Slack        return name;
12003928aee4356845252ac6b662d5c72c29903813eJake Slack    }
12103928aee4356845252ac6b662d5c72c29903813eJake Slack}
122