package ro.isdc.wro.extensions.processor.support;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import ro.isdc.wro.extensions.processor.css.BourbonCssProcessor;
import ro.isdc.wro.extensions.processor.css.CssLintProcessor;
import ro.isdc.wro.extensions.processor.css.Less4jProcessor;
import ro.isdc.wro.extensions.processor.css.LessCssProcessor;
import ro.isdc.wro.extensions.processor.css.NodeLessCssProcessor;
import ro.isdc.wro.extensions.processor.css.RhinoLessCssProcessor;
import ro.isdc.wro.extensions.processor.css.RubySassCssProcessor;
import ro.isdc.wro.extensions.processor.css.SassCssProcessor;
import ro.isdc.wro.extensions.processor.css.YUICssCompressorProcessor;
import ro.isdc.wro.extensions.processor.js.BeautifyJsProcessor;
import ro.isdc.wro.extensions.processor.js.CJsonProcessor;
import ro.isdc.wro.extensions.processor.js.CoffeeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.DojoShrinksafeCompressorProcessor;
import ro.isdc.wro.extensions.processor.js.DustJsProcessor;
import ro.isdc.wro.extensions.processor.js.EmberJsProcessor;
import ro.isdc.wro.extensions.processor.js.GoogleClosureCompressorProcessor;
import ro.isdc.wro.extensions.processor.js.HandlebarsJsProcessor;
import ro.isdc.wro.extensions.processor.js.HoganJsProcessor;
import ro.isdc.wro.extensions.processor.js.JsHintProcessor;
import ro.isdc.wro.extensions.processor.js.JsLintProcessor;
import ro.isdc.wro.extensions.processor.js.JsonHPackProcessor;
import ro.isdc.wro.extensions.processor.js.NgMinProcessor;
import ro.isdc.wro.extensions.processor.js.NodeCoffeeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.NodeTypeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.PackerJsProcessor;
import ro.isdc.wro.extensions.processor.js.RhinoCoffeeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.RhinoTypeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.TypeScriptProcessor;
import ro.isdc.wro.extensions.processor.js.UglifyJsProcessor;
import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
import ro.isdc.wro.model.resource.processor.decorator.LazyProcessorDecorator;
import ro.isdc.wro.model.resource.processor.decorator.ProcessorDecorator;
import ro.isdc.wro.model.resource.processor.support.ProcessorProvider;
import ro.isdc.wro.util.LazyInitializer;
import com.google.javascript.jscomp.CompilationLevel;
/**
* The implementation which contributes with processors from core module.
*
* @author Alex Objelean
* @created 1 Jun 2012
*/
public class DefaultProcessorProvider
implements ProcessorProvider {
/**
* {@inheritDoc}
*/
@Override
public Map<String, ResourcePreProcessor> providePreProcessors() {
return createMap();
}
/**
* {@inheritDoc}
*/
@Override
public Map<String, ResourcePostProcessor> providePostProcessors() {
final Map<String, ResourcePostProcessor> resultMap = new HashMap<String, ResourcePostProcessor>();
/**
* Created to overcome the difference between {@link ResourcePreProcessor} and {@link ResourcePostProcessor}
* interfaces which will be resolved in next major version.
*/
final Map<String, ResourcePreProcessor> preProcessorsMap = createMap();
for (final Entry<String, ResourcePreProcessor> entry : preProcessorsMap.entrySet()) {
resultMap.put(entry.getKey(), new ProcessorDecorator(entry.getValue()));
}
return resultMap;
}
/**
* @return the map of pre processors.
*/
private Map<String, ResourcePreProcessor> createMap() {
final Map<String, ResourcePreProcessor> map = new HashMap<String, ResourcePreProcessor>();
map.put(YUICssCompressorProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new YUICssCompressorProcessor();
}
}));
map.put(DojoShrinksafeCompressorProcessor.ALIAS, new LazyProcessorDecorator(
new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new DojoShrinksafeCompressorProcessor();
}
}));
map.put(UglifyJsProcessor.ALIAS_UGLIFY, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new UglifyJsProcessor();
}
}));
map.put(BeautifyJsProcessor.ALIAS_BEAUTIFY, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new BeautifyJsProcessor();
}
}));
map.put(PackerJsProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new PackerJsProcessor();
}
}));
map.put(RhinoLessCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new RhinoLessCssProcessor();
}
}));
map.put(NodeLessCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new NodeLessCssProcessor();
}
}));
map.put(Less4jProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new Less4jProcessor();
}
}));
map.put(LessCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new LessCssProcessor();
}
}));
map.put(SassCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new SassCssProcessor();
}
}));
map.put(RubySassCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new RubySassCssProcessor();
}
}));
map.put(BourbonCssProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new BourbonCssProcessor();
}
}));
map.put(GoogleClosureCompressorProcessor.ALIAS_SIMPLE, new LazyProcessorDecorator(
new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new GoogleClosureCompressorProcessor(CompilationLevel.SIMPLE_OPTIMIZATIONS);
}
}));
map.put(GoogleClosureCompressorProcessor.ALIAS_ADVANCED, new LazyProcessorDecorator(
new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new GoogleClosureCompressorProcessor(CompilationLevel.ADVANCED_OPTIMIZATIONS);
}
}));
map.put(GoogleClosureCompressorProcessor.ALIAS_WHITESPACE_ONLY, new LazyProcessorDecorator(
new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new GoogleClosureCompressorProcessor(CompilationLevel.WHITESPACE_ONLY);
}
}));
map.put(RhinoCoffeeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new RhinoCoffeeScriptProcessor();
}
}));
map.put(NodeCoffeeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new NodeCoffeeScriptProcessor();
}
}));
map.put(CoffeeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new CoffeeScriptProcessor();
}
}));
map.put(CJsonProcessor.ALIAS_PACK, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return CJsonProcessor.packProcessor();
}
}));
map.put(CJsonProcessor.ALIAS_UNPACK, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return CJsonProcessor.unpackProcessor();
}
}));
map.put(JsonHPackProcessor.ALIAS_PACK, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return JsonHPackProcessor.packProcessor();
}
}));
map.put(JsonHPackProcessor.ALIAS_UNPACK, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return JsonHPackProcessor.unpackProcessor();
}
}));
map.put(JsHintProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new JsHintProcessor();
}
}));
map.put(JsLintProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new JsLintProcessor();
}
}));
map.put(CssLintProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new CssLintProcessor();
}
}));
map.put(DustJsProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new DustJsProcessor();
}
}));
map.put(HoganJsProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new HoganJsProcessor();
}
}));
map.put(HandlebarsJsProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new HandlebarsJsProcessor();
}
}));
map.put(RhinoTypeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new RhinoTypeScriptProcessor();
}
}));
map.put(TypeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new TypeScriptProcessor();
}
}));
map.put(NodeTypeScriptProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new NodeTypeScriptProcessor();
}
}));
map.put(EmberJsProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new EmberJsProcessor();
}
}));
map.put(NgMinProcessor.ALIAS, new LazyProcessorDecorator(new LazyInitializer<ResourcePreProcessor>() {
@Override
protected ResourcePreProcessor initialize() {
return new NgMinProcessor();
}
}));
return map;
}
}