package ro.isdc.wro.model.resource.processor.decorator; import static org.apache.commons.lang3.Validate.notNull; import java.io.IOException; import java.io.Reader; import java.io.Writer; import org.apache.commons.io.IOUtils; import ro.isdc.wro.model.resource.Resource; import ro.isdc.wro.model.resource.processor.support.ProcessingCriteria; /** * Decorates the processor with a set of common useful decorators during each processing. * * @author Alex Objelean * @created 7 Oct 2012 * @since 1.6.0 */ public class DefaultProcessorDecorator extends ProcessorDecorator { private final ProcessingCriteria criteria; public DefaultProcessorDecorator(final Object processor, final boolean minimize) { this(processor, ProcessingCriteria.createDefault(minimize)); } public DefaultProcessorDecorator(final Object processor, final ProcessingCriteria criteria) { super(decorate(processor, criteria)); this.criteria = criteria; } /** * {@inheritDoc} */ @Override public void process(final Resource resource, final Reader reader, final Writer writer) throws IOException { try { super.process(resource, reader, writer); } finally { IOUtils.closeQuietly(reader); IOUtils.closeQuietly(writer); } } private static ProcessorDecorator decorate(final Object processor, final ProcessingCriteria criteria) { notNull(criteria); return new BenchmarkProcessorDecorator(new ExceptionHandlingProcessorDecorator( new SupportAwareProcessorDecorator(new MinimizeAwareProcessorDecorator(new ImportAwareProcessorDecorator( processor, criteria.getProcessingType()))))); } /** * {@inheritDoc} */ @Override protected boolean isEnabled(final Resource resource) { final boolean isApplicable = resource != null ? isEligible(criteria.isMinimize(), resource.getType()) : true; return super.isEnabled(resource) && isApplicable; } }