package com.test.security;

import java.util.Map;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.handler.WSHandlerConstants;

public class DynamicEncryptionOutInterceptor extends WSS4JOutInterceptor
{
    private String defaultActions;

    public DynamicEncryptionOutInterceptor(Map<String, Object> props)
    {
        super(props);
    }

    @Override
    public void handleMessage(SoapMessage mc) throws Fault
    {
        if (!EncryptionUtil.getEncryptionTypes().isEmpty())
        {
            mc.put(WSHandlerConstants.ENCRYPTION_PARTS, EncryptionUtil.getEncryptionTypes());
        }

        super.handleMessage(mc);
    }

    @Override
    public String getString(String key, Object mc)
    {
        if (WSHandlerConstants.ACTION.equals(key))
        {
            if (EncryptionUtil.getEncryptionTypes().isEmpty())
            {
                return defaultActions;
            }
            else
            {
                return defaultActions + ' ' + WSHandlerConstants.ENCRYPT;
            }
        }
        return super.getString(key, mc);
    }

    public void setDefaultActions(String defaultActions)
    {
        this.defaultActions = defaultActions;
    }
}
