/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.image.filter;
import com.enonic.cms.core.image.filter.command.FilterCommand;
import com.enonic.cms.core.image.filter.command.FilterCommandRegistry;
import com.enonic.cms.core.image.filter.parser.FilterExpr;
import com.enonic.cms.core.image.filter.parser.FilterExprParser;
import com.enonic.cms.core.image.filter.parser.FilterSetExpr;
public final class ImageFilterBuilder
{
private final FilterExprParser parser;
private final FilterCommandRegistry commandRegistry;
public ImageFilterBuilder()
{
this.parser = new FilterExprParser();
this.commandRegistry = new FilterCommandRegistry();
}
public ImageFilter build( BuilderContext context, String expr )
{
return build( context, this.parser.parse( expr ) );
}
private ImageFilter build( BuilderContext context, FilterSetExpr set )
{
ImageFilterSet filter = new ImageFilterSet();
for ( FilterExpr expr : set.getList() )
{
filter.addFilter( build( context, expr ) );
}
return filter;
}
private ImageFilter build( BuilderContext context, FilterExpr expr )
{
return createFilter( context, expr.getName(), expr.getArguments() );
}
private ImageFilter createFilter( BuilderContext context, String name, Object[] args )
{
FilterCommand command = this.commandRegistry.getCommand( name );
if ( command != null )
{
return command.build( context, args );
}
else
{
return null;
}
}
}