package org.bsc.maven.reporting.sink;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import javax.swing.text.AttributeSet;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.doxia.sink.SinkEventAttributeSet;
import org.apache.maven.doxia.sink.SinkEventAttributes;
public class SinkDelegate implements InvocationHandler
{
private final Sink sink;
public SinkDelegate( Sink sink ) {
this.sink = sink;
}
/** {@inheritDoc} */
public Object invoke( Object proxy, Method method, Object[] args )
throws Throwable
{
Class[] parameterTypes = method.getParameterTypes();
for ( int i = parameterTypes.length - 1; i >= 0; i-- )
{
if ( AttributeSet.class.isAssignableFrom( parameterTypes[i] ) )
{
parameterTypes[i] = SinkEventAttributes.class;
}
}
if ( args != null )
{
for ( int i = args.length - 1; i >= 0; i-- )
{
if ( AttributeSet.class.isInstance( args[i] ) )
{
args[i] = new SinkEventAttributeSet( (AttributeSet) args[i] );
}
}
}
Method target = Sink.class.getMethod( method.getName(), parameterTypes );
return target.invoke( sink, args );
}
}