All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.outbrain.ob1k.server.spring.SpringContextBuilder Maven / Gradle / Ivy

The newest version!
package com.outbrain.ob1k.server.spring;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

/**
 * User: aronen
 * Date: 6/25/13
 * Time: 6:28 PM
 */
public class SpringContextBuilder {
  public static final String DEFAULT_CONTEXT_PATH = "";

  private final List subParams;
  private final boolean allowBeanOverrideByDefault;
  private CtxParams mainParams;
  private String activeProfiles;

  public SpringContextBuilder() {
    this(DEFAULT_CONTEXT_PATH);
  }

  public SpringContextBuilder(final String contextPath) {
    this(contextPath, true);
  }

  public SpringContextBuilder(final String contextPath, final boolean allowBeanOverrideByDefault) {
    System.setProperty("com.outbrain.web.context.path", contextPath);
    this.subParams = new ArrayList<>();
    this.allowBeanOverrideByDefault = allowBeanOverrideByDefault;
  }

  private static class CtxParams {
    final String key;
    final String path;
    private final boolean allowBeanOverride;

    private CtxParams(final String key, final String path, final boolean allowBeanOverride) {
      this.key = key;
      this.path = path;
      this.allowBeanOverride = allowBeanOverride;
    }
  }


  public SpringContextBuilder setMainContext(final String name, final String path) {

    return setMainContext(name,path, allowBeanOverrideByDefault);
  }

  public SpringContextBuilder setMainContext(final String name, final String path, final boolean allowBeanOverride) {
    mainParams = new CtxParams(name, path, allowBeanOverride);
    return this;
  }

  public SpringContextBuilder addSubContext(final String name, final String path) {
    return addSubContext(name,path, allowBeanOverrideByDefault);
  }

  public SpringContextBuilder addSubContext(final String name, final String path, final boolean allowBeanOverride) {
    subParams.add(new CtxParams(name, path, allowBeanOverride));
    return this;
  }
  
  public SpringContextBuilder setActiveProfiles(final String activeProfiles) {
    this.activeProfiles = activeProfiles;
    return this;
  }

  private AbstractApplicationContext createMainContext(final boolean allowBeanOverride) {
    final GenericXmlApplicationContext context = new GenericXmlApplicationContext();
    if (activeProfiles != null && !activeProfiles.isEmpty()) {
      context.getEnvironment().setActiveProfiles(activeProfiles);
    }
    context.setAllowBeanDefinitionOverriding(allowBeanOverride);
    context.load(mainParams.path);
    context.refresh();
    return context;
  }

  public AbstractApplicationContext createSubContext(final AbstractApplicationContext parent, final String path, final boolean allowBeanOverride) {
    final GenericXmlApplicationContext subContext = new GenericXmlApplicationContext();
    subContext.setParent(parent);
    subContext.setAllowBeanDefinitionOverriding(allowBeanOverride);
    subContext.load(path);
    subContext.refresh();
    return subContext;
  }

  public SpringBeanContext build() {
    final Map contexts = new HashMap<>();

    final AbstractApplicationContext mainCtx = createMainContext(mainParams.allowBeanOverride);
    contexts.put(mainParams.key, mainCtx);
    for(final CtxParams param: subParams) {
      final AbstractApplicationContext subCtx = createSubContext(mainCtx, param.path, param.allowBeanOverride);
      contexts.put(param.key, subCtx);
    }

    return new SpringBeanContext(contexts);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy