Package org.carrot2.labs.smartsprites.ant

Source Code of org.carrot2.labs.smartsprites.ant.SmartSpritesTask$AntLogMessageSink

package org.carrot2.labs.smartsprites.ant;

import java.io.*;
import java.util.Iterator;
import java.util.List;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.resources.FileResource;
import org.carrot2.labs.smartsprites.SmartSpritesParameters;
import org.carrot2.labs.smartsprites.SpriteBuilder;
import org.carrot2.labs.smartsprites.SmartSpritesParameters.PngDepth;
import org.carrot2.labs.smartsprites.message.*;
import org.carrot2.labs.smartsprites.message.Message.MessageLevel;
import org.carrot2.util.EnumUtils;

import com.google.common.collect.Lists;

/**
* Ant task for calling SmartSprites processing.
*/
public class SmartSpritesTask extends Task
{
    private String rootDir;
    private String outputDir;
    private String documentRootDir;
    private MessageLevel logLevel;
    private MessageLevel failOnLevel = MessageLevel.ERROR;
    private String cssFileSuffix = SmartSpritesParameters.DEFAULT_CSS_FILE_SUFFIX;
    private String cssFileEncoding = SmartSpritesParameters.DEFAULT_CSS_FILE_ENCODING;
    private PngDepth spritePngDepth = SmartSpritesParameters.DEFAULT_SPRITE_PNG_DEPTH;
    private boolean spritePngIe6 = SmartSpritesParameters.DEFAULT_SPRITE_PNG_IE6;
    private boolean markSpriteImages = SmartSpritesParameters.DEFAULT_MARK_SPRITE_IMAGES;

    private List<String> cssFiles = Lists.newArrayList();

    public void setRootDir(File dir)
    {
        this.rootDir = dir.getPath();
    }

    public void setOutputDir(File outputDir)
    {
        this.outputDir = outputDir.getPath();
    }

    public void setDocumentRootDir(File documentRootDir)
    {
        this.documentRootDir = documentRootDir.getPath();
    }

    public void setLogLevel(String logLevel)
    {
        this.logLevel = getLogLevelFromString(logLevel, MessageLevel.INFO);
    }

    public void setFailOnLevel(String failOnLevel)
    {
        this.failOnLevel = getLogLevelFromString(failOnLevel, MessageLevel.ERROR);
    }

    private MessageLevel getLogLevelFromString(String logLevel, MessageLevel defaultLevel)
    {
        try
        {
            return MessageLevel.valueOf(logLevel);
        }
        catch (Exception e)
        {
            return defaultLevel;
        }
    }

    public void setCssFileEncoding(String cssFileEncoding)
    {
        this.cssFileEncoding = cssFileEncoding;
    }

    public void setCssFileSuffix(String cssFileSuffix)
    {
        this.cssFileSuffix = cssFileSuffix;
    }

    public void setSpritePngDepth(String spritePngDepthString)
    {
        this.spritePngDepth = EnumUtils.valueOf(spritePngDepthString, PngDepth.class,
            SmartSpritesParameters.DEFAULT_SPRITE_PNG_DEPTH);
    }

    public void setSpritePngIe6(boolean spritePngIe6)
    {
        this.spritePngIe6 = spritePngIe6;
    }

    public void setMarkSpriteImages(boolean markSpriteImages)
    {
        this.markSpriteImages = markSpriteImages;
    }

    @Override
    public void execute() throws BuildException
    {
        final SmartSpritesParameters parameters = new SmartSpritesParameters(rootDir,
            cssFiles, outputDir, documentRootDir, logLevel, cssFileSuffix,
            spritePngDepth, spritePngIe6, cssFileEncoding, markSpriteImages);

        final FailureDetectorMessageSink failureDetectorMessageSink = new FailureDetectorMessageSink();
        MessageLog log = new MessageLog(new AntLogMessageSink(),
            failureDetectorMessageSink);

        if (parameters.validate(log))
        {
            try
            {
                new SpriteBuilder(parameters, log).buildSprites();
            }
            catch (FileNotFoundException e)
            {
                throw new BuildException(e);
            }
            catch (IOException e)
            {
                throw new BuildException(e);
            }
        }

        if (failureDetectorMessageSink.shouldFail)
        {
            throw new BuildException(failureDetectorMessageSink.failureLevel.name() + " messages found");
        }
    }

    private class AntLogMessageSink implements MessageSink
    {
        public void add(Message message)
        {
            if (MessageLevel.COMPARATOR.compare(message.level, logLevel) >= 0)
            {
                log(message.toString());
            }
        }
    }

    private class FailureDetectorMessageSink implements MessageSink
    {
        boolean shouldFail = false;
        MessageLevel failureLevel = null;

        public void add(Message message)
        {
            if (failOnLevel != null
                && MessageLevel.COMPARATOR.compare(message.level, failOnLevel) >= 0
                && message.level != MessageLevel.STATUS)
            {
                failureLevel = message.level;
                shouldFail = true;
            }
        }
    }

    @SuppressWarnings("unchecked")
    public void addConfiguredFileset(FileSet fileset)
    {
        for (Iterator<FileResource> it = fileset.iterator(); it.hasNext();)
        {
            cssFiles.add(it.next().getFile().getPath());
        }
    }
}
TOP

Related Classes of org.carrot2.labs.smartsprites.ant.SmartSpritesTask$AntLogMessageSink

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.