Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2012 EclipseSource and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Holger Staudacher - initial API and implementation /
 
 package com.eclipsesource.jaxrs.publisher.internal;
 
 import java.util.List;
 import java.util.Map;
 
 import  org.osgi.framework.BundleContext;
 import  org.osgi.framework.ServiceReference;
 import  org.osgi.service.http.HttpService;
 
 
 
 public class JAXRSConnector {
   
   private static final String HTTP_SERVICE_PORT_PROPERTY = "org.osgi.service.http.port";
   private static final String RESOURCE_HTTP_PORT_PROPERTY = "http.port";
   private static final String DEFAULT_HTTP_PORT = "80";
   
   private final Object lock = new Object();
   private final ServiceContainer<HttpService> httpServices;
   private final ServiceContainer<Objectresources;
   private final Map<HttpService, JerseyContextcontextMap;
   private final BundleContext bundleContext;
   private final List<ServiceHolder<?>> resourceCache;
   private String rootPath;
 
   JAXRSConnector( BundleContext bundleContext ) {
     this. = bundleContext;
     this. = new ServiceContainer<HttpService>( bundleContext );
     this. = new ServiceContainer<Object>( bundleContext );
     this. = new HashMap<HttpService, JerseyContext>();
     this. = new ArrayList<ServiceHolder<?>>();
   }
   
   void updatePathString rootPath ) {
     synchronized ) {
       doUpdatePathrootPath );
     }
   }
 
   private void doUpdatePathString rootPath ) {
     this. = rootPath;
     ServiceHolder<HttpService>[] services = .getServices();
     forServiceHolder<HttpService> serviceHolder : services ) {
       doRemoveHttpServiceserviceHolder.getService() );
       doAddHttpServiceserviceHolder.getReference() );
     }
   }
   
   HttpService addHttpService( ServiceReference<HttpService> reference ) {
     synchronized ) {
       return doAddHttpServicereference );
     }
   }
 
   HttpService doAddHttpService( ServiceReference<HttpService> reference ) {
     ServiceHolder<HttpService> serviceHolder = .add( reference );
     HttpService service = serviceHolder.getService();
     .put( servicecreateJerseyContextservice ) );
     clearCache();
     return service;
   }
 
   private void clearCache() {
     ArrayList<ServiceHolder<?>> cache = new ArrayList<ServiceHolder<?>>(  );
     .clear();
     forServiceHolder<?> serviceHolder : cache ) {
       registerResourceserviceHolder );
     }
   }
 
   void removeHttpService( HttpService service ) {
     synchronized ) {
       doRemoveHttpServiceservice );
     }
   }
 
   void doRemoveHttpService( HttpService service ) {
     JerseyContext context = .remove( service );
     ifcontext != null ) {
       cacheFreedResourcescontext );
     }
     .remove( service );
   }
 
   private void cacheFreedResourcesJerseyContext context ) {
     List<ObjectfreeResources = context.eliminate();
    forObject resource : freeResources ) {
      .add.findresource ) );
    }
  }
  Object addResource( ServiceReference<Objectreference ) {
    synchronized ) {
      return doAddResourcereference );
    }
  }
  private Object doAddResource( ServiceReference<Objectreference ) {
    ServiceHolder<ObjectserviceHolder = .addreference );
    registerResourceserviceHolder );
    return serviceHolder.getService();
  }
  private void registerResourceServiceHolder<?> serviceHolder ) {
    Object port = getPortserviceHolder );
    registerResourceserviceHolderport );
  }
  private Object getPortServiceHolder<?> serviceHolder ) {
    Object port = serviceHolder.getReference().getProperty(  );
    ifport == null ) {
      port = .getProperty(  );
      ifport == null ) {
        port = ;
      }
    }
    return port;
  }
  private void registerResourceServiceHolder<?> serviceHolderObject port ) {
    HttpService service = findHttpServiceForPortport );
    ifservice != null ) {
      JerseyContext jerseyContext = .get( service );
      jerseyContext.addResourceserviceHolder.getService() );
    } else {
      cacheResourceserviceHolder );
    }
  }
  private void cacheResourceServiceHolder<?> serviceHolder ) {
    .addserviceHolder );
  }
  private HttpService findHttpServiceForPort(Object port) {
    ServiceHolder<HttpService>[] serviceHolders = .getServices();
    HttpService result = null;
    forServiceHolder<HttpService> serviceHolder : serviceHolders ) {
      Object servicePort = getPortserviceHolder );
      ifservicePort.equalsport ) ) {
        result = serviceHolder.getService();
      }
    }
    return result;
  }
  void removeResourceObject resource ) {
    synchronized ) {
      doRemoveResourceresource );
    }
  }
  private void doRemoveResourceObject resource ) {
    ServiceHolder<ObjectserviceHolder = .findresource );
    .removeserviceHolder );
    HttpService httpService = findHttpServiceForPortgetPortserviceHolder ) );
    removeResourcesFromContextresourcehttpService );
    .removeresource );
  }
  private void removeResourcesFromContextObject resource, HttpService httpService ) {
    JerseyContext jerseyContext = .get( httpService );
    ifjerseyContext != null ) {
      jerseyContext.removeResourceresource );
    }
  }
  // For testing purpose
  JerseyContext createJerseyContext( HttpService serviceString rootPath ) {
    return new JerseyContextservicerootPath );
  }
  
New to GrepCode? Check out our FAQ X