com.liferay.blade.samples.test.BladeCLIUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.blade.samples.test.BladeCLIUtil.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.blade.samples.test;

import static org.junit.Assert.assertTrue;

import aQute.bnd.osgi.Domain;
import aQute.bnd.version.Version;

import aQute.lib.io.IO;

import com.liferay.portal.kernel.util.StringUtil;

import java.io.File;
import java.io.InputStream;

import java.net.URL;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;

/**
 * @author Lawrence Lee
 */
public class BladeCLIUtil {

    public static File bladeJar;

    public static File createProject(File testDir, String templateName, String bundleName, String... createArgs)
            throws Exception {

        String[] executeArgs = new String[createArgs.length + 6];

        executeArgs[0] = "create";
        executeArgs[1] = "-d";
        executeArgs[2] = testDir.getPath();
        executeArgs[3] = "-t";
        executeArgs[4] = templateName;
        System.arraycopy(createArgs, 0, executeArgs, 5, createArgs.length);
        executeArgs[createArgs.length + 5] = bundleName;

        execute(executeArgs);

        File projectPath = new File(testDir + "/" + bundleName);

        return projectPath;
    }

    public static String execute(File workingDir, String... bladeArgs) throws Exception {

        String bladeCLIJarPath = getLatestBladeCLIJar();

        List<String> command = new ArrayList<>();

        command.add("java");
        command.add("-jar");
        command.add(bladeCLIJarPath);

        for (String arg : bladeArgs) {
            command.add(arg);
        }

        Process process = new ProcessBuilder(command.toArray(new String[0])).directory(workingDir).start();

        process.waitFor();

        InputStream stream = process.getInputStream();

        String output = new String(IO.read(stream));

        InputStream errorStream = process.getErrorStream();

        List<String> errorList = new ArrayList<>();

        if (errorStream != null) {
            errorList.add(new String(IO.read(errorStream)));
        }

        List<String> filteredErrorList = new ArrayList<>();

        for (String string : errorList) {
            if (!string.isEmpty() && !string.contains("Picked up JAVA_TOOL_OPTIONS:")) {

                filteredErrorList.add(string);
            }
        }

        assertTrue(filteredErrorList.toString(), filteredErrorList.isEmpty());

        output = StringUtil.toLowerCase(output);

        return output;
    }

    public static String execute(String... bladeArgs) throws Exception {
        return execute(null, bladeArgs);
    }

    public static String getLatestBladeCLIJar() throws Exception {
        if (bladeJar == null) {
            URL url = new URL(System.getProperty("bladeURL"));
            File file = new File("blade.jar");

            FileUtils.copyURLToFile(url, file);

            Domain jar = Domain.domain(file);

            int bundleVersion = new Version(jar.getBundleVersion()).getMajor();

            if (bundleVersion != 2) {
                throw new Exception("Expecting bladejar with major version 2, found version: " + bundleVersion);
            }

            bladeJar = file;
        }

        return bladeJar.getCanonicalPath();
    }

    public static String installBundle(File file) throws Exception {
        String output = execute("sh", "install", file.toURI().toString());

        String bundleID = output.substring(output.indexOf("bundle id:") + 11,
                output.indexOf("\n", output.indexOf("bundle id:")));

        if (output.contains("Failed") || output.contains("IOException")) {
            throw new Exception(output);
        }

        return bundleID;
    }

    public static String startBundle(String bundleID) throws Exception {
        String output = execute("sh", "start", bundleID);

        if (output.contains("Exception")) {
            throw new Exception(output);
        }

        return output;
    }

    public static void uninstallBundle(String... bundleIDArgs) throws Exception {

        String[] executeArgs = new String[bundleIDArgs.length + 2];

        executeArgs[0] = "sh";
        executeArgs[1] = "uninstall";
        System.arraycopy(bundleIDArgs, 0, executeArgs, 2, bundleIDArgs.length);
        execute(executeArgs);
    }

}