/**
 * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.web.bundle;

import java.util.List;

import javax.servlet.ServletContext;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.UriInfo;

import org.apache.commons.lang.StringUtils;
import org.joda.beans.impl.flexi.FlexiBean;

import com.google.common.collect.Iterables;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.web.AbstractPerRequestWebResource;
import com.opengamma.web.sass.WebJRubySassCompiler;

/**
 * Abstract base class for RESTful bundle resources.
 */
public abstract class AbstractWebBundleResource extends AbstractPerRequestWebResource {

  /**
   * The backing bean.
   */
  private final WebBundlesData _data;

  /**
   * Creates the resource.
   * 
   * @param bundleManagerFactory  the bundle manager, not null
   * @param compressor  the bundle compressor, not null
   * @param mode  the deploy mode, not null
   */
  protected AbstractWebBundleResource(
      final BundleManagerFactory bundleManagerFactory, final BundleCompressor compressor, final DeployMode mode) {
    ArgumentChecker.notNull(bundleManagerFactory, "bundleManagerFactory");
    ArgumentChecker.notNull(compressor, "compressedBundleSource");
    ArgumentChecker.notNull(mode, "mode");
    _data = new WebBundlesData();
    
    data().setBundleManagerFactory(bundleManagerFactory);
    data().setCompressor(compressor);
    data().setMode(mode);
  }

  /**
   * Creates the resource.
   * 
   * @param parent  the parent resource, not null
   */
  protected AbstractWebBundleResource(final AbstractWebBundleResource parent) {
    super(parent);
    _data = parent.data();
  }

  //-------------------------------------------------------------------------
  /**
   * Setter used to inject the URIInfo.
   * This is a roundabout approach, because Spring and JSR-311 injection clash.
   * DO NOT CALL THIS METHOD DIRECTLY.
   * @param uriInfo  the URI info, not null
   */
  @Context
  public void setUriInfo(final UriInfo uriInfo) {
    data().setUriInfo(uriInfo);
  }

  @Override
  @Context
  public void setServletContext(ServletContext servletContext) {
    super.setServletContext(servletContext);
    
    // initialise the manager now that we have the servlet context
    BundleManager bundleManager = _data.getBundleManagerFactory().get(servletContext);
    data().setBundleManager(bundleManager);
    data().setDevBundleManager(new DevBundleBuilder(bundleManager).getDevBundleManager());
    data().setSassCompiler(WebJRubySassCompiler.of(servletContext));
  }
  
  @Context
  public void setHttpHeaders(HttpHeaders httpHeaders) {
    data().setHttpHeaders(httpHeaders);
  }

  //-------------------------------------------------------------------------
  /**
   * Creates the output root data.
   * 
   * @return the output root data, not null
   */
  protected FlexiBean createRootData() {
    FlexiBean out = getFreemarker().createRootData();
    out.put("ogStyle", new StyleTag(data()));
    out.put("ogScript", new ScriptTag(data()));
    HttpHeaders httpHeaders = data().getHttpHeaders();
    String openfin = StringUtils.EMPTY;
    if (httpHeaders != null) {
      out.put("httpHeaders", data().getHttpHeaders());
      List<String> openfinHeader = httpHeaders.getRequestHeader("x-powered-by");
      if (openfinHeader != null) {
        openfin = Iterables.getFirst(openfinHeader, StringUtils.EMPTY);
      }
    }
    out.put("openfin", openfin);
    return out;
  }

  //-------------------------------------------------------------------------
  /**
   * Gets the backing bean.
   * 
   * @return the backing bean, not null
   */
  protected WebBundlesData data() {
    return _data;
  }

}

@@ -3562,16 +3562,30 @@
  openfin
+.toLowerCase()
 );%0A    r

Convert openfin to lowercase