org.mule.test.infrastructure.process.MuleUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.mule.test.infrastructure.process.MuleUtils.java

Source

/*
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */
package org.mule.test.infrastructure.process;

import java.io.File;
import java.io.IOException;
import java.util.Map;

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.PumpStreamHandler;
import org.apache.commons.exec.environment.EnvironmentUtils;
import org.apache.commons.io.FileUtils;

public class MuleUtils {

    private static final long TIMEOUT = 1800000;
    private String muleHome;
    private String populateM2repoCommand;

    public MuleUtils(String muleHome) {
        this.muleHome = muleHome;
        this.populateM2repoCommand = muleHome + "/bin/populate_m2_repo";
    }

    public void populateM2Repo(String repo) throws IOException {
        File repository = new File(repo);
        if (!repository.exists()) {
            FileUtils.forceMkdir(repository);
        }
        if (!repository.isDirectory()) {
            throw new IllegalArgumentException("Repository should be a directory.");
        }
        executeCommand(populateM2repoCommand + " " + repo, "MULE_HOME=" + muleHome);
    }

    public static int executeCommand(String command, String... envVars) throws IOException {
        CommandLine cmdLine = CommandLine.parse(command);
        DefaultExecutor executor = new DefaultExecutor();
        Map<String, String> env = addEnvProperties(envVars);
        ExecuteWatchdog watchDog = new ExecuteWatchdog(TIMEOUT);
        executor.setWatchdog(watchDog);
        executor.setStreamHandler(new PumpStreamHandler());
        int result = executor.execute(cmdLine, env);
        if (executor.isFailure(result)) {
            if (watchDog.killedProcess()) {
                throw new RuntimeException("Reached timeout while running: " + cmdLine);
            }
            throw new RuntimeException("Process failed with return code [" + result + "]: " + cmdLine);
        }
        return result;
    }

    private static Map<String, String> addEnvProperties(String[] envVars) throws IOException {
        @SuppressWarnings("unchecked")
        Map<String, String> env = EnvironmentUtils.getProcEnvironment();
        for (String envVar : envVars) {
            EnvironmentUtils.addVariableToEnvironment(env, envVar);
        }
        return env;
    }

}