Package org.springframework.roo.addon.cloud.providers.cloudfoundry

Source Code of org.springframework.roo.addon.cloud.providers.cloudfoundry.CloudFoundryProvider

package org.springframework.roo.addon.cloud.providers.cloudfoundry;

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

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.springframework.roo.addon.cloud.providers.CloudProvider;
import org.springframework.roo.classpath.TypeLocationService;
import org.springframework.roo.classpath.TypeManagementService;
import org.springframework.roo.process.manager.FileManager;
import org.springframework.roo.project.Configuration;
import org.springframework.roo.project.PathResolver;
import org.springframework.roo.project.Plugin;
import org.springframework.roo.project.ProjectOperations;
import org.springframework.roo.support.util.XmlUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

/**
*
* This Cloud Provider provides you the functionalities to deploy Spring Roo
* application on Cloud Foundry
*
* @author Juan Carlos García del Canto
* @since 1.2.6
*/
@Component
@Service
public class CloudFoundryProvider implements CloudProvider {

  @Reference
  private FileManager fileManager;

  @Reference
  private PathResolver pathResolver;

  @Reference
  private TypeLocationService typeLocationService;

  @Reference
  private TypeManagementService typeManagementService;

  @Reference
  private ProjectOperations projectOperations;

  /**
   * DECLARING CONSTANTS
   */

  public static final String NAME = "CLOUD_FOUNDRY";

  public static final String DESCRIPTION = "Setup Cloud Foundry Maven Plugin on your Spring Roo Application";

  private static final Logger LOGGER = Logger
      .getLogger(CloudFoundryProvider.class.getName());

  /**
   * This method configure your project with Cloud Foundry Maven Plugin
   *
   * @param configuration
   */
  @Override
  public void setup(String pluginConfiguration) {
    // Adding Cloud Foundry Maven Plugin
    updatePlugins(pluginConfiguration, projectOperations);
    // Showing INFO about how to use CF Maven Plugin
    showInfo(pluginConfiguration);
  }

  /**
   *
   * This method update plugins with the added to configuration.xml file
   *
   * @param configuration
   * @param moduleName
   * @param projectOperations
   */
  public static void updatePlugins(String pluginConfiguration,
      ProjectOperations projectOperations) {

    Configuration conf = null;

    // Generating configuration if necessary
    if (StringUtils.isNotBlank(pluginConfiguration)) {
      try {

        DocumentBuilderFactory docFactory = DocumentBuilderFactory
            .newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

        Document doc = docBuilder.newDocument();
        Element configElement = doc.createElement("configuration");

        // Getting all configurations
        String[] configurationTags = pluginConfiguration.split(",");

        for (String configurationTag : configurationTags) {
          String[] keyValue = configurationTag.split("=");
          if (keyValue.length == 2) {
            Element element = doc.createElement(keyValue[0]);
            element.setTextContent(keyValue[1]);
            configElement.appendChild(element);
          }
        }

        conf = new Configuration(configElement);

      } catch (Exception e) {
        LOGGER.log(Level.WARNING, "[ERROR] " + e);
      }
    }

    // Generate Plugin
    Plugin cloudFoundryMvnPlugin = new Plugin("org.cloudfoundry",
        "cf-maven-plugin", "1.0.4", conf, null, null);

    // Adding plugin
    projectOperations
        .addBuildPlugin(projectOperations.getFocusedModuleName(),
            cloudFoundryMvnPlugin);
  }

  /**
   * This method shows info about how to use Cloud Foundry
   *
   * @param configuration
   */
  public static void showInfo(String configuration) {
    // Showing congrats message
    LOGGER.log(
        Level.INFO,
        "Congratulations! Now you can use Cloud Foundry Maven Plugin to deploy your applications!");
    LOGGER.log(Level.INFO, "");
    // Showing current config if necessary
    if (StringUtils.isNotBlank(configuration)) {
      LOGGER.log(Level.INFO, "This is your current configuration:");
      LOGGER.log(Level.INFO, "");
      LOGGER.log(Level.INFO, "<configuration>");
      // Getting all configurations
      String[] configurationTags = configuration.split(",");

      for (String configurationTag : configurationTags) {
        String[] keyValue = configurationTag.split("=");
        if (keyValue.length == 2) {
          LOGGER.log(Level.INFO, String.format("   <%s>%s</%s>",
              keyValue[0], keyValue[1], keyValue[0]));
        }
      }
      LOGGER.log(Level.INFO, "</configuration>");
    } else {
      LOGGER.log(Level.INFO,
          "WARNING: You don't specify any configuration.");
    }
    // Showing commands you can use with maven CF Plugin
    LOGGER.log(Level.INFO, "");
    LOGGER.log(
        Level.INFO,
        "You can use the following Cloud Foundry Maven Plugin commands with \"perform command --mavenCommand\" on ROO Shell or using \"mvn\" on OS command line.");
    LOGGER.log(Level.INFO, "");
    LOGGER.log(Level.INFO, "Command                 Description");
    LOGGER.log(Level.INFO, "----------------------------------------");
    LOGGER.log(Level.INFO, "cf:apps                List deployed applications.");
    LOGGER.log(Level.INFO,
        "cf:app                   Show details of an application.");
    LOGGER.log(Level.INFO, "cf:delete               Delete an application.");
    LOGGER.log(Level.INFO,
        "cf:env                   Show an application's environment variables.");
    LOGGER.log(Level.INFO,
        "cf:help               Show documentation for all available commands.");
    LOGGER.log(Level.INFO,
        "cf:push               Push and optionally start an application.");
    LOGGER.log(
        Level.INFO,
        "cf:push-only            Push and optionally start an application, without packaging.");
    LOGGER.log(Level.INFO, "cf:restart               Restart an application.");
    LOGGER.log(Level.INFO, "cf:start               Start an application.");
    LOGGER.log(Level.INFO, "cf:stop                  Stop an application.");
    LOGGER.log(
        Level.INFO,
        "cf:target                   Show information about the target Cloud Foundry service.");
    LOGGER.log(Level.INFO,
        "cf:logs                   Tail application logs.");
    LOGGER.log(Level.INFO,
        "cf:recentLogs               Show recent application logs.");
    LOGGER.log(Level.INFO,
        "cf:scale                   Scale the application instances up or down.");
    LOGGER.log(Level.INFO,
        "cf:services                 Show a list of provisioned services.");
    LOGGER.log(Level.INFO,
        "cf:service-plans           Show a list of available service plans.");
    LOGGER.log(Level.INFO,
        "cf:create-services           Create services defined in the pom.");
    LOGGER.log(Level.INFO,
        "cf:delete-services           Delete services defined in the pom.");
    LOGGER.log(Level.INFO,
        "cf:bind-services           Bind services to an application.");
    LOGGER.log(Level.INFO,
        "cf:unbind-services           Unbind services from an application.");
    LOGGER.log(
        Level.INFO,
        "cf:delete-orphaned-routes   Delete all routes that are not bound to any application.");
    LOGGER.log(
        Level.INFO,
        "cf:login                   Log in to the target Cloud Foundry service and save access tokens.");
    LOGGER.log(
        Level.INFO,
        "cf:logout                   Log out of the target Cloud Foundry service and remove access tokens.");
  }

  /**
   * PROVIDER CONFIGURATION METHODS
   */

  @Override
  public String getName() {
    return NAME;
  }

  @Override
  public String getDescription() {
    return DESCRIPTION;
  }

}
TOP

Related Classes of org.springframework.roo.addon.cloud.providers.cloudfoundry.CloudFoundryProvider

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.