/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.image.filter.command;
import java.awt.image.BufferedImageOp;
import com.enonic.cms.core.image.filter.AwtImageFilter;
import com.enonic.cms.core.image.filter.BuilderContext;
import com.enonic.cms.core.image.filter.ImageFilter;
import com.enonic.cms.core.image.filter.OperationImageFilter;
public abstract class FilterCommand
{
private final String name;
public FilterCommand( String name )
{
this.name = name;
}
public final String getName()
{
return this.name;
}
public final ImageFilter build( BuilderContext context, Object[] args )
{
Object filter = doBuild( context, args );
if ( filter instanceof BufferedImageOp )
{
return wrap( (BufferedImageOp) filter );
}
else if ( filter instanceof ImageFilter )
{
return (ImageFilter) filter;
}
else if ( filter instanceof java.awt.image.ImageFilter )
{
return wrap( (java.awt.image.ImageFilter) filter );
}
else
{
return null;
}
}
protected abstract Object doBuild( BuilderContext context, Object[] args );
private ImageFilter wrap( BufferedImageOp operation )
{
return new OperationImageFilter( operation );
}
private ImageFilter wrap( java.awt.image.ImageFilter operation )
{
return new AwtImageFilter( operation );
}
private Object getArg( Object[] args, int index )
{
if ( index < args.length )
{
return args[index];
}
return null;
}
protected final int getIntArg( Object[] args, int index, int defValue )
{
return convertToInteger( getArg( args, index ), defValue );
}
protected final String getStringArg( Object[] args, int index, String defValue )
{
return convertToString( getArg( args, index ), defValue );
}
protected final float getFloatArg( Object[] args, int index, float defValue )
{
return convertToFloat( getArg( args, index ), defValue );
}
protected final double getDoubleArg( Object[] args, int index, double defValue )
{
return convertToDouble( getArg( args, index ), defValue );
}
protected final boolean getBooleanArg( Object[] args, int index, boolean defValue )
{
return convertToBoolean( getArg( args, index ), defValue );
}
private String convertToString( Object arg, String defValue )
{
if ( arg == null )
{
return defValue;
}
if ( arg instanceof String )
{
return (String) arg;
}
return arg.toString();
}
private Integer convertToInteger( Object arg, Integer defValue )
{
if ( arg == null )
{
return defValue;
}
if ( arg instanceof Number )
{
return ( (Number) arg ).intValue();
}
try
{
return new Integer( arg.toString() );
}
catch ( Exception e )
{
return defValue;
}
}
private Float convertToFloat( Object arg, Float defValue )
{
if ( arg == null )
{
return defValue;
}
if ( arg instanceof Number )
{
return ( (Number) arg ).floatValue();
}
try
{
return new Float( arg.toString() );
}
catch ( Exception e )
{
return defValue;
}
}
private Double convertToDouble( Object arg, Double defValue )
{
if ( arg == null )
{
return defValue;
}
if ( arg instanceof Number )
{
return ( (Number) arg ).doubleValue();
}
try
{
return new Double( arg.toString() );
}
catch ( Exception e )
{
return defValue;
}
}
private Boolean convertToBoolean( Object arg, Boolean defValue )
{
if ( arg == null )
{
return defValue;
}
if ( arg instanceof Boolean )
{
return (Boolean) arg;
}
try
{
return Boolean.parseBoolean( arg.toString() );
}
catch ( Exception e )
{
return defValue;
}
}
}