io.apigee.buildTools.enterprise4g.mavenplugin.ConfigureMojo.java Source code

Java tutorial

Introduction

Here is the source code for io.apigee.buildTools.enterprise4g.mavenplugin.ConfigureMojo.java

Source

/**
 * Copyright (C) 2014 Apigee Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.apigee.buildTools.enterprise4g.mavenplugin;

import io.apigee.buildTools.enterprise4g.utils.PackageConfigurer;
import io.apigee.buildTools.enterprise4g.utils.ZipUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.io.FileUtils;

import java.io.File;

/**
 * Goal to upload 4g gateway  bundle on server
 *
 * @author sdey
 * @goal configure
 * @phase package
 */

public class ConfigureMojo extends GatewayAbstractMojo {

    public void execute() throws MojoExecutionException, MojoFailureException {

        if (super.isSkip()) {
            getLog().info("Skipping");
            return;
        }

        Logger logger = LoggerFactory.getLogger(ConfigureMojo.class);
        File configFile = findConfigFile(logger);

        if (configFile != null) {
            configurePackage(logger, configFile);
        }

        logger.info("\n\n=============Checking for node.js app================\n\n");
        //sometimes node.js source lives outside the apiproxy/ in node/ within the base project directory
        String externalNodeDirPath = super.getBaseDirectoryPath() + "/node/";
        File externalNodeDir = new File(externalNodeDirPath);

        //if node.js source is inside apiproxy/ directory, it will be in the build directory
        String nodeDirPath = super.getBuildDirectory() + "/apiproxy/resources/node/";
        File nodeDir = new File(nodeDirPath);

        //if we find files in the node/ directory outside apiproxy/, move into apiproxy/resources/node
        //this takes precedence and we will overwrite potentially stale node.js code in  apiproxy/resources/node
        if (externalNodeDir.isDirectory()) {
            String[] filesInExternalNodeDir = externalNodeDir.list();
            if (filesInExternalNodeDir.length > 0) {
                logger.info(
                        "Node.js app code found outside apiproxy/ directory. Moving to target/apiproxy/resources/node (will overwrite).");
                try {
                    FileUtils.deleteDirectory(nodeDir);
                    FileUtils.copyDirectory(externalNodeDir, nodeDir);
                } catch (Exception e) {
                    throw new MojoExecutionException(e.getMessage());
                }
            }
        }

        //always handle zipping of any directories in apiproxy/resources/node
        if (nodeDir.isDirectory()) {
            logger.info("\n\n=============Now zipping node modules================\n\n");

            String[] filesInNodeDir = nodeDir.list();

            for (String fileName : filesInNodeDir) {
                String filePath = nodeDirPath + fileName;
                File dirFile = new File(filePath);
                if (dirFile.isDirectory() && fileName.contains("node_modules")) {
                    logger.info("Zipping " + fileName + " (it is a directory).");
                    try {
                        ZipUtils zu = new ZipUtils();
                        zu.zipDir(new File(filePath + ".zip"), dirFile, fileName);
                        FileUtils.deleteDirectory(dirFile);
                    } catch (Exception e) {
                        throw new MojoExecutionException(e.getMessage());
                    }
                }
            }

        }

        logger.info("\n\n=============Now zipping the App Bundle================\n\n");

        try {
            ZipUtils zu = new ZipUtils();
            zu.zipDir(new File(super.getApplicationBundlePath()), new File(super.getBuildDirectory() + "/apiproxy"),
                    "apiproxy");
        } catch (Exception e) {
            throw new MojoExecutionException(e.getMessage());
        }
    }

    private void configurePackage(Logger logger, File configFile) throws MojoExecutionException {
        logger.debug(
                "\n\n=============Now updating the configuration values for the App Bundle================\n\n");
        try {
            if (super.getProfile().getProfileId() != null && super.getProfile().getProfileId() != "") {
                PackageConfigurer.configurePackage(super.getProfile().getProfileId(), configFile);
            } else {
                PackageConfigurer.configurePackage(super.getProfile().getEnvironment(), configFile);
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
            throw new MojoExecutionException(e.getMessage());
        }
    }

    private File findConfigFile(Logger logger) throws MojoExecutionException {
        File configFile = new File(super.getBaseDirectoryPath() + File.separator + "config.json");

        if (configFile.exists()) {
            return configFile;
        }

        logger.info("No config.json found. Skipping package configuration.");
        return null;
    }
}