/addon-email/addon/src/main/java/org/springframework/roo/addon/email/addon/MailCommands.java
Java | 287 lines | 227 code | 43 blank | 17 comment | 20 complexity | de56f9c9d26f30d1b1272064a2549871 MD5 | raw file
- package org.springframework.roo.addon.email.addon;
- import static org.springframework.roo.shell.OptionContexts.APPLICATION_FEATURE_INCLUDE_CURRENT_MODULE;
- import org.apache.felix.scr.annotations.Component;
- import org.apache.felix.scr.annotations.Reference;
- import org.apache.felix.scr.annotations.Service;
- import org.osgi.framework.BundleContext;
- import org.osgi.service.component.ComponentContext;
- import org.springframework.roo.classpath.ModuleFeatureName;
- import org.springframework.roo.classpath.TypeLocationService;
- import org.springframework.roo.model.JavaType;
- import org.springframework.roo.project.ProjectOperations;
- import org.springframework.roo.project.maven.Pom;
- import org.springframework.roo.shell.CliAvailabilityIndicator;
- import org.springframework.roo.shell.CliCommand;
- import org.springframework.roo.shell.CliOption;
- import org.springframework.roo.shell.CliOptionAutocompleteIndicator;
- import org.springframework.roo.shell.CliOptionMandatoryIndicator;
- import org.springframework.roo.shell.CliOptionVisibilityIndicator;
- import org.springframework.roo.shell.CommandMarker;
- import org.springframework.roo.shell.ShellContext;
- import org.springframework.roo.support.logging.HandlerUtils;
- import java.util.List;
- import java.util.Map;
- import java.util.logging.Logger;
- /**
- * Commands for the 'email' add-on to be used by the Roo shell.
- *
- * @author Stefan Schmidt
- * @author Juan Carlos GarcĂa
- * @author Manuel Iborra
- * @since 1.0
- */
- @Component
- @Service
- public class MailCommands implements CommandMarker {
- private static final Logger LOGGER = HandlerUtils.getLogger(MailCommands.class);
- @Reference
- private MailOperations mailOperations;
- @Reference
- private TypeLocationService typeLocationService;
- @Reference
- private ProjectOperations projectOperations;
- // ------------ OSGi component attributes ----------------
- private BundleContext context;
- protected void activate(final ComponentContext context) {
- this.context = context.getBundleContext();
- }
- protected void deactivate(final ComponentContext context) {
- this.context = null;
- }
- @CliAvailabilityIndicator("email sender setup")
- public boolean isInstallSenderEmailAvailable() {
- return mailOperations.isEmailInstallationPossible();
- }
- @CliOptionVisibilityIndicator(command = "email sender setup", params = {"jndiName"},
- help = "jndiName parameter is not available if any of host, "
- + "port, protocol, username, password or starttls are selected.")
- public boolean isJndiVisibleSenderSetup(ShellContext shellContext) {
- Map<String, String> params = shellContext.getParameters();
- // If user define host, port, protocol, username, password or starttls
- // parameters, jndiName should not be visible.
- if (params.containsKey("host") || params.containsKey("port") || params.containsKey("protocol")
- || params.containsKey("username") || params.containsKey("password")
- || params.containsKey("starttls")) {
- return false;
- }
- return true;
- }
- @CliOptionVisibilityIndicator(command = "email sender setup", params = {"host", "port",
- "protocol", "username", "password", "starttls"},
- help = "Connection parameters are not available if jndiName is specified.")
- public boolean areConnectionParamsVisibleSenderSetup(ShellContext shellContext) {
- Map<String, String> params = shellContext.getParameters();
- // If user define jndiName parameter, connection parameters should not
- // be visible
- if (params.containsKey("jndiName")) {
- return false;
- }
- return true;
- }
- @CliOptionVisibilityIndicator(command = "email sender setup", params = {"module"},
- help = "Module parameter is not available if there is only one application module")
- public boolean isModuleVisibleSenderSetup(ShellContext shellContext) {
- if (typeLocationService.getModuleNames(ModuleFeatureName.APPLICATION).size() > 1) {
- return true;
- }
- return false;
- }
- @CliOptionMandatoryIndicator(command = "email sender setup", params = "module")
- public boolean isModuleRequiredSenderSetup(ShellContext shellContext) {
- Pom module = projectOperations.getFocusedModule();
- if (!isModuleVisibleSenderSetup(shellContext)
- || typeLocationService.hasModuleFeature(module, ModuleFeatureName.APPLICATION)) {
- return false;
- }
- return true;
- }
- @CliOptionAutocompleteIndicator(
- command = "email sender setup",
- param = "service",
- help = "--service parameter parameter is the service where will be added the support to send emails")
- public List<String> returnServicesImpl(ShellContext shellContext) {
- return mailOperations.getAllServiceImpl(shellContext.getParameters().get("service"));
- }
- @CliCommand(value = "email sender setup",
- help = "Install a Spring JavaMailSender in your project")
- public void installSenderEmail(
- @CliOption(key = {"host"}, mandatory = false, help = "The host server. "
- + "This option is not available if `--jndiName` has already been specified.") final String host,
- @CliOption(key = {"port"}, mandatory = false, help = "The port used by mail server. "
- + "This option is not available if `--jndiName` has already been specified.") final String port,
- @CliOption(key = {"protocol"}, mandatory = false, help = "The protocol used by mail server. "
- + "This option is not available if `--jndiName` has already been specified.") final String protocol,
- @CliOption(key = {"username"}, mandatory = false, help = "The mail account username. "
- + "This option is not available if `--jndiName` has already been specified.") final String username,
- @CliOption(key = {"password"}, mandatory = false, help = "The mail account password. "
- + "This option is not available if `--jndiName` has already been specified.") final String password,
- @CliOption(key = {"starttls"}, mandatory = false,
- help = "If true, enables the use of the STARTTLS command. "
- + "This option is not available if `--jndiName` has already been specified.") final Boolean starttls,
- @CliOption(key = {"jndiName"}, mandatory = false,
- help = "The jndi name where the mail configuration has been defined. "
- + "This option is not available if any of `--host`, `--port`, "
- + "`--protocol`, `--username`, `--password` or `--starttls` has "
- + "been specified before.") final String jndiName,
- @CliOption(key = {"profile"}, mandatory = false,
- help = "The profile where the properties will be set.") final String profile,
- @CliOption(
- key = "module",
- mandatory = true,
- help = "The application module where generate the integration test. "
- + "This option is mandatory if the focus is not set in an 'application' module and there "
- + "are more than one 'application' modules, that is, a module containing an "
- + "`@SpringBootApplication` class. "
- + "This option is available only if there are more than one application module and none of"
- + " them is focused. "
- + "Default if option not present: the unique 'application' module, or focused 'application'"
- + " module.", unspecifiedDefaultValue = ".",
- optionContext = APPLICATION_FEATURE_INCLUDE_CURRENT_MODULE) Pom module,
- @CliOption(
- key = "service",
- mandatory = false,
- help = "The service where include an instance of JavaMailSender, which is a service that "
- + "have methods to send emails.") final JavaType service, ShellContext shellContext) {
- mailOperations.installSendEmailSupport(host, port, protocol, username, password, starttls,
- jndiName, profile, module, service, shellContext.isForce());
- }
- @CliAvailabilityIndicator("email receiver setup")
- public boolean isInstallReceiverEmailAvailable() {
- return mailOperations.isEmailInstallationPossible();
- }
- @CliOptionVisibilityIndicator(command = "email receiver setup", params = {"jndiName"},
- help = "jndiName parameter is not available if any of host, "
- + "port, protocol, username, password or starttls are selected.")
- public boolean isJndiVisibleReceiverSetup(ShellContext shellContext) {
- Map<String, String> params = shellContext.getParameters();
- // If user define host, port, protocol, username, password or starttls
- // parameters, jndiName should not be visible.
- if (params.containsKey("host") || params.containsKey("port") || params.containsKey("protocol")
- || params.containsKey("username") || params.containsKey("password")
- || params.containsKey("starttls")) {
- return false;
- }
- return true;
- }
- @CliOptionVisibilityIndicator(command = "email receiver setup", params = {"host", "port",
- "protocol", "username", "password", "starttls"},
- help = "Connection parameters are not available if jndiName is specified.")
- public boolean areConnectionParamsVisibleReceiverSetup(ShellContext shellContext) {
- Map<String, String> params = shellContext.getParameters();
- // If user define jndiName parameter, connection parameters should not
- // be visible
- if (params.containsKey("jndiName")) {
- return false;
- }
- return true;
- }
- @CliOptionVisibilityIndicator(command = "email receiver setup", params = {"module"},
- help = "Module parameter is not available if there is only one application module")
- public boolean isModuleVisibleReceiverSetup(ShellContext shellContext) {
- if (typeLocationService.getModuleNames(ModuleFeatureName.APPLICATION).size() > 1) {
- return true;
- }
- return false;
- }
- @CliOptionMandatoryIndicator(command = "email receiver setup", params = "module")
- public boolean isModuleRequiredReceiverSetup(ShellContext shellContext) {
- Pom module = projectOperations.getFocusedModule();
- if (!isModuleVisibleReceiverSetup(shellContext)
- || typeLocationService.hasModuleFeature(module, ModuleFeatureName.APPLICATION)) {
- return false;
- }
- return true;
- }
- @CliOptionAutocompleteIndicator(
- command = "email receiver setup",
- param = "service",
- help = "--service parameter parameter is the service where will be added the support to receive emails")
- public List<String> returnServicesImplReceiverSetup(ShellContext shellContext) {
- return mailOperations.getAllServiceImpl(shellContext.getParameters().get("service"));
- }
- @CliCommand(value = "email receiver setup",
- help = "Installs a Spring JavaMailReceiver in your project.")
- public void installReceiverEmail(
- @CliOption(key = {"host"}, mandatory = false, help = "The host server. "
- + "This option is not available if `--jndiName` has already been specified.") final String host,
- @CliOption(key = {"port"}, mandatory = false, help = "The port used by mail server. "
- + "This option is not available if `--jndiName` has already been specified.") final String port,
- @CliOption(key = {"protocol"}, mandatory = false, help = "The protocol used by mail server. "
- + "This option is not available if `--jndiName` has already been specified.") final String protocol,
- @CliOption(key = {"username"}, mandatory = false, help = "The mail account username. "
- + "This option is not available if `--jndiName` has already been specified.") final String username,
- @CliOption(key = {"password"}, mandatory = false, help = "The mail account password. "
- + "This option is not available if `--jndiName` has already been specified.") final String password,
- @CliOption(key = {"starttls"}, mandatory = false,
- help = "If true, enables the use of the STARTTLS command. "
- + "This option is not available if `--jndiName` has already been specified.") final Boolean starttls,
- @CliOption(key = {"jndiName"}, mandatory = false,
- help = "The jndi name where the mail configuration has been defined. "
- + "This option is not available if any of `--host`, `--port`, "
- + "`--protocol`, `--username`, `--password` or `--starttls` has "
- + "been specified before.") final String jndiName,
- @CliOption(key = {"profile"}, mandatory = false,
- help = "The profile where the properties will be set.") final String profile,
- @CliOption(
- key = "module",
- mandatory = true,
- help = "The application module where generate the integration test. "
- + "This option is mandatory if the focus is not set in an 'application' module and there "
- + "are more than one 'application' modules, that is, a module containing an "
- + "`@SpringBootApplication` class. "
- + "This option is available only if there are more than one application module and none of"
- + " them is focused. "
- + "Default if option not present: the unique 'application' module, or focused 'application'"
- + " module.", unspecifiedDefaultValue = ".",
- optionContext = APPLICATION_FEATURE_INCLUDE_CURRENT_MODULE) Pom module, @CliOption(
- key = "service", mandatory = false,
- help = "The service where include an instance of MailReceiverService, which is a "
- + "service that have methods to receive emails.") final JavaType service,
- ShellContext shellContext) {
- mailOperations.installReceiveEmailSupport(host, port, protocol, username, password, starttls,
- jndiName, profile, module, service, shellContext.isForce());
- }
- }