Package maqetta.zazl

Source Code of maqetta.zazl.Activator$HttpServiceTracker

package maqetta.zazl;

import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;

import javax.servlet.Filter;

import org.davinci.ajaxLibrary.Library;
import org.dojotoolkit.compressor.JSCompressorFactory;
import org.dojotoolkit.compressor.shrinksafe.ShrinksafeJSCompressorFactory;
import org.dojotoolkit.optimizer.JSOptimizerFactory;
import org.dojotoolkit.optimizer.amd.rhinoast.AMDJSOptimizerFactory;
import org.dojotoolkit.optimizer.servlet.JSServlet;
import org.dojotoolkit.server.util.resource.ResourceLoader;
import org.dojotoolkit.server.util.rhino.RhinoClassLoader;
import org.eclipse.equinox.http.registry.HttpContextExtensionService;
import org.eclipse.equinox.http.servlet.ExtendedHttpService;
import org.maqetta.server.ServerManager;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpContext;
import org.osgi.util.tracker.ServiceTracker;

public class Activator implements BundleActivator {
  private BundleContext bundleContext = null;
  private ServiceTracker httpServiceTracker = null;
  //private ServiceTracker httpContextExtensionServiceTracker = null;
  private ServiceReference httpServiceReference = null;
  private HttpContextExtensionService httpContextExtensionService = null;
  private ExtendedHttpService httpService = null;
  private HttpContext httpContext = null;
  private String httpContextName = "maqetta.core.server.httpcontext";
  private boolean registered = false;
  private Filter maqettaHTMLFilter = null;

  public void start(BundleContext bundleContext) throws Exception {
    this.bundleContext = bundleContext;
    httpServiceTracker = new HttpServiceTracker(bundleContext);
    httpServiceTracker.open();
    /*
    httpContextExtensionServiceTracker = new HttpContextExtensionServiceTracker(bundleContext);
    httpContextExtensionServiceTracker.open();
    */
  }

  public void stop(BundleContext bundleContext) throws Exception {
    /*
    httpContextExtensionServiceTracker.close();
    httpContextExtensionServiceTracker = null;
    */
    httpServiceTracker.close();
    httpServiceTracker = null;
    this.bundleContext = null;
  }
 
  protected boolean register() {
    if (!registered && httpService != null) {// && httpContextExtensionService != null) {
      /*
      httpContext = httpContextExtensionService.getHttpContext(httpServiceReference, httpContextName);
      if (httpContext == null) {
        System.out.println("Unable to obtain HttpContext for "+httpContextName);
        return registered;
      }
      */
      String[] bundleIds = {
        "org.json.js",
        "org.dojotoolkit.server.util.js",
        "org.dojotoolkit.optimizer.amd",
        "org.dojotoolkit.optimizer.servlet"
      };
      List<Library> srcLibraryList = new ArrayList<Library>();
      Library[] libraries = ServerManager.getServerManager().getLibraryManager().getAllLibraries();
      for (Library library : libraries) {
        if (library.getSourcePath() != null) {
          srcLibraryList.add(library);
        }
      }
      MaqettaOSGiResourceLoader resourceLoader = new MaqettaOSGiResourceLoader(bundleContext, bundleIds, ServerManager.getServerManager().getUserManager(), srcLibraryList);
      RhinoClassLoader rhinoClassLoader = new RhinoClassLoader(resourceLoader);
      JSCompressorFactory jsCompressorFactory = null;
      Boolean jscompress = Boolean.valueOf(System.getProperty("maqetta.zazl.jscompress", "false"));
      if (jscompress) {
        jsCompressorFactory = new ShrinksafeJSCompressorFactory();
      }
      JSOptimizerFactory jsOptimizerFactory = new AMDJSOptimizerFactory();
 
      JSServlet jsServlet = new JSServlet(resourceLoader, jsOptimizerFactory, rhinoClassLoader, "zazl", null, null, jsCompressorFactory);
      maqettaHTMLFilter = new MaqettaHTMLFilter(resourceLoader);
      try {
        System.out.println("Registering Zazl JavaScript servlet");
        httpService.registerServlet("/_javascript", jsServlet, null, null);
        System.out.println("Registering Maqetta HTML Filter for Zazl");
        Dictionary<String, String> initParams = new Hashtable<String, String>();
        initParams.put("filter-priority", "1");
        httpService.registerFilter("/maqetta/user/*.html", maqettaHTMLFilter, initParams, null);
        registered = true;
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return registered;
  }

  private class HttpContextExtensionServiceTracker extends ServiceTracker {
    public HttpContextExtensionServiceTracker(BundleContext context) {
      super(context, HttpContextExtensionService.class.getName(), null);
    }
   
    public Object addingService(ServiceReference reference) {
      httpContextExtensionService = (HttpContextExtensionService)context.getService(reference);
      register();
      return httpContextExtensionService;
    }
  }
 
  private class HttpServiceTracker extends ServiceTracker {
    public HttpServiceTracker(BundleContext context) {
      super(context, ExtendedHttpService.class.getName(), null);
    }

    public Object addingService(ServiceReference reference) {
      httpServiceReference = reference;
      httpService = (ExtendedHttpService) context.getService(reference);
      register();
      return httpService;
    }

    public void removedService(ServiceReference reference, Object service) {
      if (registered) {
        httpService.unregister("/_javascript");
        httpService.unregisterFilter(maqettaHTMLFilter);
      }
      super.removedService(reference, service);
    }     
  }
}
TOP

Related Classes of maqetta.zazl.Activator$HttpServiceTracker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.