Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.
  */
 package org.apache.felix.webconsole.internal.core;
 
 
 import java.io.Writer;
 
 
ServicesServlet provides a plugin for inspecting the registered services.
 
 public class ServicesServlet extends SimpleWebConsolePlugin implements OsgiManagerPlugin
 {
     // don't create empty reference array all the time, create it only once - it is immutable
     private static final ServiceReference[] NO_REFS = new ServiceReference[0];
 
     private final class RequestInfo
     {
         public final String extension;
         public final ServiceReference service;
         public final boolean serviceRequested;
 
 
         protected RequestInfofinal HttpServletRequest request )
         {
             String info = request.getPathInfo();
             // remove label and starting slash
             info = info.substringgetLabel().length() + 1 );
 
             // get extension
             if ( info.endsWith".json" ) )
             {
                  = "json";
                 info = info.substring( 0, info.length() - 5 );
             }
             else
             {
                  = "html";
             }
 
             // we only accept direct requests to a service if they have a slash
             // after the label
             String serviceInfo = null;
             if ( info.startsWith"/" ) )
             {
                 serviceInfo = info.substring( 1 );
             }
             if ( serviceInfo == null || serviceInfo.length() == 0 )
             {
                  = null;
                  = false;
             }
             else
             {
                  = getServiceByIdserviceInfo );
                  = true;
             }
             request.setAttributeServicesServlet.class.getName(), this );
         }
 
    }
    static RequestInfo getRequestInfofinal HttpServletRequest request )
    {
        return ( RequestInfo ) request.getAttributeServicesServlet.class.getName() );
    }

    
the label for the services plugin
    public static final String LABEL = "services"//$NON-NLS-1$
    private static final String TITLE = "%services.pluginTitle"//$NON-NLS-1$
    private static final String CSS[] = null;
    // an LDAP filter, that is used to search services
    private static final String FILTER_PARAM = "filter";
    private final String TEMPLATE;

    
Default constructor
    public ServicesServlet() {
        super();
        // load templates
         = readTemplateFile"/templates/services.html" ); //$NON-NLS-1$
    }
    private ServiceRegistration bipReg;
    public void activate(BundleContext bundleContext)
    {
        super.activate(bundleContext);
         = new ServicesUsedInfoProviderbundleContext.getBundle() ).registerbundleContext );
    }
    public void deactivate() {
	if ( null !=  )
	{
	    .unregister();
	     = null;
	}
        super.deactivate();
    }
    final ServiceReference getServiceByIdString pathInfo )
    {
        // only use last part of the pathInfo
        pathInfo = pathInfo.substringpathInfo.lastIndexOf'/' ) + 1 );
        StringBuffer filter = new StringBuffer();
        filter.append"(" ).append. ).append"=" );
        filter.appendpathInfo ).append")" );
        String filterStr = filter.toString();
        try
        {
            ServiceReference[] refs = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferencesnullfilterStr );
            if ( refs == null || refs.length != 1 )
            {
                return null;
            }
            return refs[0];
        }
        catch ( InvalidSyntaxException e )
        {
            log"Unable to search for services using filter " + filterStre );
            // this shouldn't happen
            return null;
        }
    }
    private final ServiceReference[] getServices(String filter)
    {
        // empty filter string will return nothing, must set it to null to return all services
        if (filter != null && filter.trim().length() == 0) {
            filter = null;
        }
        try
        {
            final ServiceReference[] refs = BundleContextUtil.getWorkingBundleContext(this.getBundleContext()).getAllServiceReferencesnullfilter );
            if ( refs != null )
            {
                return refs;
            }
        }
        catch ( InvalidSyntaxException e )
        {
            log"Unable to access service reference list."e );
        }
        // no services or invalid filter syntax (unlikely)
        return ;
    }
    static final String getStatusLinefinal ServiceReference[] services )
    {
        final int count = services.length;
        final StringBuffer buffer = new StringBuffer();
        buffer.appendcount );
        buffer.append" service" );
        if ( count != 1 )
            buffer.append's' );
        buffer.append" in total" );
        return buffer.toString();
    }
    static final String propertyAsStringServiceReference refString name )
    {
        final Object value = ref.getPropertyname );
        return WebConsoleUtil.toStringvalue );
    }
    private void renderJSONfinal HttpServletResponse responsefinal ServiceReference servicefinal Locale locale )
        throws IOException
    {
        response.setContentType"application/json" );
        response.setCharacterEncoding"UTF-8" );
        final PrintWriter pw = response.getWriter();
        writeJSONpwservicelocalenull);
    }
    private void serviceDetailsJSONWriter jwServiceReference service ) throws JSONException
    {
        String[] keys = service.getPropertyKeys();
        jw.key"props" );
        jw.array();
        for ( int i = 0; i < keys.lengthi++ )
        {
            String key = keys[i];
            if ( ..equalskey ) )
            {
                Util.keyValjw"Service PID"service.getPropertykey ) );
            }
            else if ( ..equalskey ) )
            {
                Util.keyValjw"Service Description"service.getPropertykey ) );
            }
            else if ( ..equalskey ) )
            {
                Util.keyValjw"Service Vendor"service.getPropertykey ) );
            }
            else if ( !..equalskey ) && !..equalskey ) )
            {
                Util.keyValjwkeyservice.getPropertykey ) );
            }
        }
        jw.endArray();
    }
    private void usingBundlesJSONWriter jwServiceReference serviceLocale locale ) throws JSONException
    {
        jw.key"usingBundles" );
        jw.array();
        Bundle[] usingBundles = service.getUsingBundles();
        if ( usingBundles != null )
        {
            for ( int i = 0; i < usingBundles.lengthi++ )
            {
                jw.object();
                bundleInfojwusingBundles[i], locale );
                jw.endObject();
            }
        }
        jw.endArray();
    }
    private void serviceInfoJSONWriter jwServiceReference serviceboolean detailsfinal Locale locale ) throws JSONException
    {
        jw.object();
        jw.key"id" );
        jw.valuepropertyAsStringservice. ) );
        jw.key"types" );
        jw.valuepropertyAsStringservice. ) );
        jw.key"pid" );
        jw.valuepropertyAsStringservice. ) );
        jw.key"ranking" );
        final Object ranking = service.getProperty(.);
        if ( ranking != null )
        {
            jw.valueranking.toString() );
        }
        else
        {
            jw.value("");
        }
        bundleInfojwservice.getBundle(), locale );
        if ( details )
        {
            serviceDetailsjwservice );
            usingBundlesjwservicelocale );
        }
        jw.endObject();
    }
    private void bundleInfofinal JSONWriter jwfinal Bundle bundlefinal Locale locale ) throws JSONException
    {
        jw.key"bundleId" );
        jw.valuebundle.getBundleId() );
        jw.key"bundleName" );
        jw.value( Util.getNamebundlelocale ) );
        jw.key"bundleVersion" );
        jw.value( Util.getHeaderValuebundle. ) );
        jw.key"bundleSymbolicName" );
        jw.valuebundle.getSymbolicName() );
    }
    private void writeJSON(final Writer pwfinal ServiceReference servicefinal Locale localefinal String filterthrows IOException
    {
        writeJSONpwservicefalselocalefilter );
    }
    private void writeJSONfinal Writer pwfinal ServiceReference servicefinal boolean fullDetailsfinal Locale localefinal String filter )
        throws IOException
    {
        final ServiceReference[] allServices = this.getServices(filter);
        final String statusLine = getStatusLineallServices );
        final ServiceReference[] services = ( service != null ) ? new ServiceReference[]
            { service } : allServices;
        final JSONWriter jw = new JSONWriterpw );
        try
        {
            jw.object();
            jw.key"status" );
            jw.valuestatusLine );
            jw.key"serviceCount" );
            jw.valueallServices.length );
            jw.key"data" );
            jw.array();
            for ( int i = 0; i < services.lengthi++ )
            {
                serviceInfojwservices[i], fullDetails || service != nulllocale );
            }
            jw.endArray();
            jw.endObject();
        }
        catch ( JSONException je )
        {
            throw new IOExceptionje.toString() );
        }
    }


    
    protected void doGetHttpServletRequest requestHttpServletResponse response ) throws ServletException,
        IOException
    {
        if (request.getPathInfo().indexOf("/res/") == -1)
        { // not resource
            final RequestInfo reqInfo = new RequestInforequest );
            if ( reqInfo.service == null && reqInfo.serviceRequested )
            {
                response.sendError( 404 );
                return;
            }
            if ( reqInfo.extension.equals"json" ) )
            {
                this.renderJSONresponsereqInfo.servicerequest.getLocale() );
                // nothing more to do
                return;
            }
        }
        super.doGetrequestresponse );
    }


    
    protected void renderContentHttpServletRequest requestHttpServletResponse response ) throws IOException
    {
        // get request info from request attribute
        final RequestInfo reqInfo = getRequestInforequest );
        final String appRoot = ( String ) request.getAttribute. );
        StringWriter w = new StringWriter();
        final String filter = request.getParameter();
        writeJSON(wreqInfo.servicerequest.getLocale(), filter);
        // prepare variables
        DefaultVariableResolver vars = ( ( DefaultVariableResolver ) WebConsoleUtil.getVariableResolverrequest ) );
        vars.put"bundlePath"appRoot +  "/" + . + "/" );
        vars.put"drawDetails", String.valueOf(reqInfo.serviceRequested));
        vars.put"__data__"w.toString() );
        vars.put"filter"filter == null ? "" : WebConsoleUtil.escapeHtml(filter));
        response.getWriter().print );
    }
New to GrepCode? Check out our FAQ X