/**
* Copyright wro4j@2011
*/
package ro.isdc.wro.model.resource.processor.decorator;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ro.isdc.wro.model.resource.Resource;
import ro.isdc.wro.model.resource.processor.ResourcePostProcessor;
import ro.isdc.wro.model.resource.processor.ResourcePreProcessor;
import ro.isdc.wro.util.WroUtil;
/**
* Inspects the resource for copyright (licence) header and inserts them back if the decorated processor removes them.
* The decorated processor does the compression logic and probably removes copyright comments. If copyright comments are
* removed, our processor will put them back.
*
* @author Alex Objelean
* @created 14 May 2011
* @since 1.3.7
*/
public class CopyrightKeeperProcessorDecorator
extends ProcessorDecorator {
private static final Logger LOG = LoggerFactory.getLogger(CopyrightKeeperProcessorDecorator.class);
private static final Pattern PATTERN_COPYRIGHT = Pattern.compile(WroUtil.loadRegexpWithKey("comment.copyright"));
private CopyrightKeeperProcessorDecorator(final ResourcePreProcessor preProcessor) {
super(preProcessor);
}
private CopyrightKeeperProcessorDecorator(final ResourcePostProcessor postProcessor) {
super(postProcessor);
}
public static CopyrightKeeperProcessorDecorator decorate(final ResourcePreProcessor preProcessor) {
return new CopyrightKeeperProcessorDecorator(preProcessor);
}
/**
* {@inheritDoc}
*/
@Override
public void process(final Resource resource, final Reader reader, final Writer writer)
throws IOException {
try {
final String content = IOUtils.toString(reader);
final Matcher originalMatcher = PATTERN_COPYRIGHT.matcher(content);
final StringBuffer copyrightBuffer = new StringBuffer();
while (originalMatcher.find()) {
LOG.debug("found copyright comment");
// add copyright header to the buffer.
copyrightBuffer.append(originalMatcher.group());
}
LOG.debug("buffer: {}", copyrightBuffer);
final Writer processedWriter = new StringWriter();
getDecoratedObject().process(resource, new StringReader(content), processedWriter);
final Matcher processedMatcher = PATTERN_COPYRIGHT.matcher(processedWriter.toString());
if (!processedMatcher.find()) {
writer.write(copyrightBuffer.toString());
}
writer.write(processedWriter.toString());
} finally {
reader.close();
writer.close();
}
}
}