content: package ro.isdc.wro.model.resource.processor.support;
  
  import java.util.HashMap;
  import java.util.Map;
  import java.util.Map.Entry;
  
  import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
  import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
  import ro.isdc.wro.model.resource.processor.decorator.ProcessorDecorator;
  import ro.isdc.wro.model.resource.processor.impl.MultiLineCommentStripperProcessor;
  import ro.isdc.wro.model.resource.processor.impl.SingleLineCommentStripperProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.ConformColorsCssProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssCompressorProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssDataUriPreProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssImportPreProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssMinProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssUrlAuthorizationProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssUrlRewritingProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.CssVariablesProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.DuplicatesAwareCssDataUriPreProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.FallbackCssDataUriProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.JawrCssMinifierProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.LessCssImportPreProcessor;
  import ro.isdc.wro.model.resource.processor.impl.css.VariablizeColorsCssProcessor;
  import ro.isdc.wro.model.resource.processor.impl.js.ConsoleStripperProcessor;
  import ro.isdc.wro.model.resource.processor.impl.js.JSMinProcessor;
  import ro.isdc.wro.model.resource.processor.impl.js.SemicolonAppenderPreProcessor;
  
  
  /**
   * The implementation which contributes with processors from core module.
   *
   * @author Alex Objelean
   * @created 1 Jun 2012
   */
  public class DefaultProcessorProvider
      implements ProcessorProvider {
    /**
     * {@inheritDoc}
     */
    public Map<String, ResourcePreProcessor> providePreProcessors() {
      final Map<String, ResourcePreProcessor> map = new HashMap<String, ResourcePreProcessor>();
      populateProcessorsMap(map);
      return map;
    }
  
    /**
     * {@inheritDoc}
     */
    public Map<String, ResourcePostProcessor> providePostProcessors() {
      return toPostProcessors(providePreProcessors());
    }
  
    /**
     * Creates a map of postProcessors form a map of preProcessors. This method will be removed in 1.5.0 release when
     * there will be no differences between pre & post processor interface.
     */
    private Map<String, ResourcePostProcessor> toPostProcessors(
        final Map<String, ResourcePreProcessor> preProcessorsMap) {
      final Map<String, ResourcePostProcessor> map = new HashMap<String, ResourcePostProcessor>();
      for (final Entry<String, ResourcePreProcessor> entry : preProcessorsMap.entrySet()) {
        map.put(entry.getKey(), new ProcessorDecorator(entry.getValue()));
      }
      return map;
    }
  
    private void populateProcessorsMap(final Map<String, ResourcePreProcessor> map) {
      map.put(CssUrlRewritingProcessor.ALIAS, new CssUrlRewritingProcessor());
      map.put(CssImportPreProcessor.ALIAS, new CssImportPreProcessor());
      map.put(LessCssImportPreProcessor.ALIAS, new LessCssImportPreProcessor());
      map.put(CssVariablesProcessor.ALIAS, new CssVariablesProcessor());
      map.put(CssCompressorProcessor.ALIAS, new CssCompressorProcessor());
      map.put(SemicolonAppenderPreProcessor.ALIAS, new SemicolonAppenderPreProcessor());
      map.put(CssDataUriPreProcessor.ALIAS, new CssDataUriPreProcessor());
      map.put(FallbackCssDataUriProcessor.ALIAS, new FallbackCssDataUriProcessor());
      map.put(DuplicatesAwareCssDataUriPreProcessor.ALIAS_DUPLICATE, new DuplicatesAwareCssDataUriPreProcessor());
      map.put(JawrCssMinifierProcessor.ALIAS, new JawrCssMinifierProcessor());
      map.put(CssMinProcessor.ALIAS, new CssMinProcessor());
      map.put(JSMinProcessor.ALIAS, new JSMinProcessor());
      map.put(VariablizeColorsCssProcessor.ALIAS, new VariablizeColorsCssProcessor());
      map.put(ConformColorsCssProcessor.ALIAS, new ConformColorsCssProcessor());
      map.put(SingleLineCommentStripperProcessor.ALIAS, new SingleLineCommentStripperProcessor());
      map.put(MultiLineCommentStripperProcessor.ALIAS, new MultiLineCommentStripperProcessor());
      map.put(ConsoleStripperProcessor.ALIAS, new ConsoleStripperProcessor());
      map.put(CssUrlAuthorizationProcessor.ALIAS, new CssUrlAuthorizationProcessor());
    }
  }
  