content: /*
   * Copyright (c) 2008. All rights reserved.
   */
  package ro.isdc.wro.extensions.processor.css;
  
  import java.io.IOException;
  import java.io.Reader;
  import java.io.Writer;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import ro.isdc.wro.WroRuntimeException;
  import ro.isdc.wro.extensions.processor.support.yui.YuiCssCompressor;
  import ro.isdc.wro.model.group.processor.Minimize;
  import ro.isdc.wro.model.resource.Resource;
  import ro.isdc.wro.model.resource.ResourceType;
  import ro.isdc.wro.model.resource.SupportedResourceType;
  import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
  import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
  
  
  /**
   * YUICssCompressorProcessor. Use YUI css compression utility for processing a css resource.
   *
   * @author Alex Objelean
   * @created Created on Dec 4, 2008
   */
  @Minimize
  @SupportedResourceType(ResourceType.CSS)
  public class YUICssCompressorProcessor
    implements ResourcePostProcessor, ResourcePreProcessor {
    private static final Logger LOG = LoggerFactory.getLogger(YUICssCompressorProcessor.class);
    public static final String ALIAS = "yuiCssMin";
    /**
     * An option of CssCompressor.
     */
    private static final int linebreakpos = -1;
  
    /**
     * {@inheritDoc}
     */
    @Override
    public void process(final Reader reader, final Writer writer)
      throws IOException {
      process(null, reader, writer);
    }
  
    /**
     * {@inheritDoc}
     */
    @Override
    public void process(final Resource resource, final Reader reader, final Writer writer)
      throws IOException {
      try {
        final YuiCssCompressor compressor = new YuiCssCompressor(reader);
        compressor.compress(writer, linebreakpos);
      } catch(final Exception e) {
        LOG.error("Exception occured while processing resource: " + resource + " using processor: " + ALIAS);
        onException(e);
      } finally {
        reader.close();
        writer.close();
      }
    }
  
  
    /**
     * Invoked when a processing exception occurs.
     */
    protected void onException(final Exception e) {
      throw WroRuntimeException.wrap(e);
    }
  }
  