package org.dcache.util.jetty;
import com.google.common.collect.ImmutableMap;
import org.eclipse.jetty.rewrite.handler.HeaderPatternRule;
import org.eclipse.jetty.rewrite.handler.RuleContainer;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Required;
import javax.annotation.PostConstruct;
/**
* Spring factory bean for creating a Jetty rewriting Rule where all
* configuration with some prefix are always set in the response header.
*/
public class HeaderRewriteRuleContainerFactoryBean implements FactoryBean<RuleContainer>
{
private ImmutableMap<String,String> _headers;
private final RuleContainer _rule = new RuleContainer();
@Required
public void setHeaders(ImmutableMap<String,String> headers)
{
_headers = headers;
}
@PostConstruct
private void buildMap()
{
_rule.setRewritePathInfo(false);
_rule.setRewriteRequestURI(false);
_headers.forEach((name,value)-> {
HeaderPatternRule rule = new HeaderPatternRule();
rule.setPattern("/*");
rule.setName(name);
rule.setValue(value);
_rule.addRule(rule);
});
}
@Override
public RuleContainer getObject() throws Exception
{
return _rule;
}
@Override
public Class<?> getObjectType()
{
return RuleContainer.class;
}
@Override
public boolean isSingleton()
{
return true;
}
}