All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cc.catalysts.gradle.dmuncle.DMUnclePlugin.groovy Maven / Gradle / Ivy

There is a newer version: 0.0.29
Show newest version
package cc.catalysts.gradle.dmuncle

import groovyx.net.http.ContentType
import groovyx.net.http.HTTPBuilder
import groovyx.net.http.Method
import net.sf.json.JSONObject
import org.apache.commons.lang.StringUtils
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.json.simple.JSONArray

/**
 * @author Cristian Ilca, Catalysts Romania on 18.0.2015.
 */

class DMUnclePluginExtension {
    String server
    int requestTimeout
}

class DMUnclePlugin implements Plugin {

    def allDeps = "";
    JSONObject JSONPackage = new JSONObject();
    JSONArray compileDeps = new JSONArray();
    JSONArray testCompileDeps = new JSONArray();
    JSONArray runtimeDeps = new JSONArray();
    JSONArray testRuntimeDeps = new JSONArray();

    void apply(Project project) {
        project.extensions.create("dmuncle", DMUnclePluginExtension)
        project.task('dmUncleWatch') << {
            println "Starting dm-uncle plugin"
            JSONPackage.put("projectName", project.getName());
            project.getAllprojects().each { proj ->
                proj.configurations.each { conf ->
                    if (conf.name == "compile") {
                        conf.allDependencies.each { dep ->
                            if (!dep.hasProperty('dependencyProject')) {
                                if (!allDeps.contains("${dep.group}:${dep.name}:${dep.version}")) {
                                    if(StringUtils.isNotEmpty(dep.group) && dep.group != "unspecified" && StringUtils.isNotEmpty(dep.name) && dep.name != "unspecified") {
                                        compileDeps.add(getDepsInJSONObject(dep.group, dep.name, dep.version));
                                    }
                                }
                                allDeps += "${dep.group}:${dep.name}:${dep.version}\n"
                            }
                        }
                    }
                    if (conf.name == "testCompile") {
                        conf.allDependencies.each { dep ->
                            if (!dep.hasProperty('dependencyProject')) {
                                if (!allDeps.contains("${dep.group}:${dep.name}:${dep.version}")) {
                                    if(StringUtils.isNotEmpty(dep.group) && dep.group != "unspecified" && StringUtils.isNotEmpty(dep.name) && dep.name != "unspecified") {
                                        testCompileDeps.add(getDepsInJSONObject(dep.group, dep.name, dep.version));
                                    }
                                }
                                allDeps += "${dep.group}:${dep.name}:${dep.version}\n"
                            }
                        }
                    }
                    if (conf.name == "runtime") {
                        conf.allDependencies.each { dep ->
                            if (!dep.hasProperty('dependencyProject')) {
                                if (!allDeps.contains("${dep.group}:${dep.name}:${dep.version}")) {
                                    if(StringUtils.isNotEmpty(dep.group) && dep.group != "unspecified" && StringUtils.isNotEmpty(dep.name) && dep.name != "unspecified") {
                                        runtimeDeps.add(getDepsInJSONObject(dep.group, dep.name, dep.version));
                                    }
                                }
                                allDeps += "${dep.group}:${dep.name}:${dep.version}\n"
                            }
                        }
                    }
                    if (conf.name == "testRuntime") {
                        conf.allDependencies.each { dep ->
                            if (!dep.hasProperty('dependencyProject')) {
                                if (!allDeps.contains("${dep.group}:${dep.name}:${dep.version}")) {
                                    if(StringUtils.isNotEmpty(dep.group) && dep.group != "unspecified" && StringUtils.isNotEmpty(dep.name) && dep.name != "unspecified") {
                                        testRuntimeDeps.add(getDepsInJSONObject(dep.group, dep.name, dep.version));
                                    }
                                }
                                allDeps += "${dep.group}:${dep.name}:${dep.version}\n"
                            }
                        }
                    }
                }
            }
            composeJSONPackage()
            sendDependencies(project.dmuncle.server, project.dmuncle.requestTimeout)
        }
    }

    JSONObject getDepsInJSONObject(String group, String name, String version) {
        JSONObject jsonDeps = new JSONObject();
        jsonDeps.put("groupId", group);
        jsonDeps.put("artifactId", name);
        jsonDeps.put("version", version);
        return jsonDeps;
    }

    void composeJSONPackage() {
        JSONPackage.put("compileArtifacts", compileDeps);
        JSONPackage.put("testCompileArtifacts", testCompileDeps);
        JSONPackage.put("runtimeArtifacts", runtimeDeps);
        JSONPackage.put("testRuntimeArtifacts", testRuntimeDeps);
    }

    void sendDependencies(String url, int timeout) {
        if(timeout == null) {
            timeout = 100000;
        }

        println "Start http request to " + url

        def http = new HTTPBuilder(url);
        http.ignoreSSLIssues()
        http.getClient().getParams().setParameter("http.connection.timeout", new Integer(timeout))
        http.getClient().getParams().setParameter("http.socket.timeout", new Integer(timeout))

        http.handler.success = { println "Successfuly sent data. Please check your project status at ${url}" }

        http.handler.failure = { resp ->
            println "Data was not sent. The JSON package has been saved locally."
            def destJSON = new File("dm-uncle-package.json")
            destJSON.text = JSONPackage
        }

        println "Sending 'POST' request to URL : " + url
        http.request(Method.POST, ContentType.JSON) {
            uri.path = '/import'
            body = JSONPackage
        };
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy