package org.springframework.roo.addon.tailor.actions;
import java.util.Map;
import java.util.logging.Logger;
import org.springframework.roo.addon.tailor.CommandTransformation;
import org.springframework.roo.addon.tailor.util.TailorHelper;
import org.springframework.roo.support.logging.HandlerUtils;
/**
* Performs actual action in application logic.
*
* @author Vladimir Tihomirov
*/
public abstract class AbstractAction implements Action {
private static final Logger LOGGER = HandlerUtils.getLogger(AbstractAction.class);
/**
* {@inheritDoc}
*/
public void execute(final CommandTransformation command, final ActionConfig config) {
if (isValid(config)) {
final ActionConfig processedConfig = processConfigAttributes(command, config);
executeImpl(command, processedConfig);
} else {
LOGGER.warning("Invalid configuration for tailor action: " + config);
}
}
/*
* @see #execute(RooCommand, ActionConfig)
*/
protected abstract void executeImpl(CommandTransformation command, ActionConfig config);
private ActionConfig processConfigAttributes(final CommandTransformation command,
final ActionConfig config) {
// Process variables in config
final ActionConfig processedConfig = new ActionConfig(config.getActionTypeId());
final Map<String, String> attributes = config.getAttributes();
for (final Map.Entry<String, String> entry : attributes.entrySet()) {
final String processedValue = TailorHelper.replaceVars(command, entry.getValue());
processedConfig.setAttribute(entry.getKey(), processedValue);
}
return processedConfig;
}
}