Package org.springframework.roo.addon.tailor

Source Code of org.springframework.roo.addon.tailor.DefaultTailorImpl

package org.springframework.roo.addon.tailor;

import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.commons.lang3.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.osgi.service.component.ComponentContext;
import org.springframework.roo.addon.tailor.actions.Action;
import org.springframework.roo.addon.tailor.actions.ActionConfig;
import org.springframework.roo.addon.tailor.config.CommandConfiguration;
import org.springframework.roo.addon.tailor.config.TailorConfiguration;
import org.springframework.roo.addon.tailor.service.ActionLocator;
import org.springframework.roo.addon.tailor.service.ConfigurationLocator;
import org.springframework.roo.addon.tailor.util.CommentedLine;
import org.springframework.roo.addon.tailor.util.TailorHelper;
import org.springframework.roo.shell.AbstractShell;
import org.springframework.roo.shell.Shell;
import org.springframework.roo.shell.Tailor;
import org.springframework.roo.support.logging.HandlerUtils;

/**
* Executed by {@link AbstractShell}. Triggers execution of configured actions
*
* @author Vladimir Tihomirov
*/
@Service
@Component(immediate = true)
public class DefaultTailorImpl implements Tailor {
    @Reference protected ActionLocator actionLocator;
    @Reference protected ConfigurationLocator configLocator;
    @Reference protected Shell shell;

    private static final Logger LOGGER = HandlerUtils
            .getLogger(DefaultTailorImpl.class);
    protected boolean inBlockComment = false;

    /**
     * @Inheritdoc
     */
    public List<String> sew(String command) {
        if (StringUtils.isBlank(command)) {
            return Collections.emptyList();
        }
        try {
            // validate if it is commented
            final CommentedLine comment = new CommentedLine(command,
                    inBlockComment);
            TailorHelper.removeComment(comment);
            inBlockComment = comment.getInBlockComment();
            command = comment.getLine();
            if (StringUtils.isBlank(command)) {
                return Collections.emptyList();
            }
            // parse and tailor
            final CommandTransformation commandTrafo = new CommandTransformation(
                    command);
            execute(commandTrafo);
            return commandTrafo.getOutputCommands();
        }
        catch (final Exception e) {
            // Do nothing if exception happened
            LOGGER.log(
                    Level.WARNING,
                    "Error tailoring, cancelled command execution: "
                            + e.getMessage());
            return Collections.emptyList();
        }
    }

    // We have to done explicit injection to support API compatibility with STS
    // shell
    protected void activate(final ComponentContext context) {
        if (shell != null) {
            shell.setTailor(this);
        }
    }

    protected void deactivate(final ComponentContext context) {
        if (shell != null) {
            shell.setTailor(null);
        }
    }

    protected void logInDevelopmentMode(final Level level, final String logMsg) {
        if (shell.isDevelopmentMode()) {
            LOGGER.log(level, logMsg);
        }
    }

    private void execute(final CommandTransformation commandTrafo) {
        final TailorConfiguration configuration = configLocator
                .getActiveTailorConfiguration();
        if (configuration == null) {
            return;
        }
        final CommandConfiguration commandConfig = configuration
                .getCommandConfigFor(commandTrafo.getInputCommand());
        if (commandConfig == null) {
            return;
        }
        logInDevelopmentMode(Level.INFO,
                "Tailor: detected " + commandTrafo.getInputCommand());

        for (final ActionConfig config : commandConfig.getActions()) {
            final Action component = actionLocator.getAction(config
                    .getActionTypeId());
            if (component != null) {
                logInDevelopmentMode(Level.INFO,
                        "\tTailoring: " + component.getDescription(config));
                component.execute(commandTrafo, config);
            }
            else {
                logInDevelopmentMode(
                        Level.WARNING,
                        "\tTailoring: Couldn't find action '"
                                + config.getActionTypeId());
            }
        }
    }
}
TOP

Related Classes of org.springframework.roo.addon.tailor.DefaultTailorImpl

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.