content: /**
   * Copyright Alex Objelean
   */
  package ro.isdc.wro.model.resource.processor.impl.css;
  
  import java.io.IOException;
  import java.util.List;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import ro.isdc.wro.config.jmx.WroConfiguration;
  import ro.isdc.wro.model.group.Inject;
  import ro.isdc.wro.model.group.processor.PreProcessorExecutor;
  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.support.CssImportInspector;
  import ro.isdc.wro.model.resource.processor.support.ProcessingCriteria;
  import ro.isdc.wro.model.resource.processor.support.ProcessingType;
  
  
  /**
   * CssImport Processor responsible for handling css <code>@import</code> statement. It is implemented as both:
   * preProcessor & postProcessor. It is necessary because preProcessor is responsible for updating model with found
   * imported resources, while post processor removes import occurrences.
   * <p/>
   * When processor finds an import which is not valid, it will check the
   * {@link WroConfiguration#isIgnoreMissingResources()} flag. If it is set to false, the processor will fail.
   *
   * @author Alex Objelean
   */
  @SupportedResourceType(ResourceType.CSS)
  public class CssImportPreProcessor
    extends AbstractCssImportPreProcessor {
    private static final Logger LOG = LoggerFactory.getLogger(CssImportPreProcessor.class);
  
    public static final String ALIAS = "cssImport";
    @Inject
    private PreProcessorExecutor preProcessorExecutor;
  
    /**
     * {@inheritDoc}
     */
    @Override
    protected String doTransform(final String cssContent, final List<Resource> foundImports)
        throws IOException {
      final StringBuilder sb = new StringBuilder();
      // for now, minimize always
      // TODO: find a way to get minimize property dynamically.
      sb.append(preProcessorExecutor.processAndMerge(foundImports,
          ProcessingCriteria.create(ProcessingType.IMPORT_ONLY, false)));
      if (!foundImports.isEmpty()) {
        LOG.debug("Imported resources found : {}", foundImports.size());
      }
      sb.append(cssContent);
      LOG.debug("importsCollector: {}", foundImports);
      return removeImportStatements(sb.toString());
    }
  
    /**
     * @return the css content with all css import statements removed.
     */
    protected String removeImportStatements(final String cssContent) {
      return new CssImportInspector(cssContent).removeImportStatements();
    }
  }
  