org.openmrs.maven.plugins.bintray.OpenmrsBintray.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.maven.plugins.bintray.OpenmrsBintray.java

Source

package org.openmrs.maven.plugins.bintray;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.openmrs.maven.plugins.utility.DefaultJira;

import java.io.File;
import java.util.Arrays;
import java.util.List;

public class OpenmrsBintray extends Bintray {
    public static final String OPENMRS_USERNAME = "openmrs";
    public static final String BINTRAY_OWA_REPO = "owa";
    public static final String OPENMRS_MAVEN_REPO = "maven";
    public static final String OPENMRS_OMOD_REPO = "omod";
    public static final String OPENMRS_OWA_PREFIX = "openmrs-owa-";
    public static final String OPENMRS_MODULE_PREFIX = "openmrs-module-";

    private static final String OWA_PACKAGE_EXTENSION = ".zip";

    public OpenmrsBintray() {
    }

    public OpenmrsBintray(String username, String password) {
        super(username, password);
    }

    public List<BintrayId> getAvailableOWA() throws MojoExecutionException {
        return getAvailablePackages(OPENMRS_USERNAME, BINTRAY_OWA_REPO);
    }

    public BintrayPackage getOwaMetadata(String name) throws MojoExecutionException {
        return getPackageMetadata(OPENMRS_USERNAME, BINTRAY_OWA_REPO, name);
    }

    public void downloadOWA(File destination, String name, String version) {
        if (!destination.exists()) {
            destination.mkdir();
        }
        List<BintrayFile> bintrayFiles = getPackageFiles(OPENMRS_USERNAME, BINTRAY_OWA_REPO, name, version);
        //Assumption: owa release is single zip file
        String packageName = parseOwaNameFromFile(bintrayFiles.get(0).getPath()) + OWA_PACKAGE_EXTENSION;
        File downloadedFile = downloadFile(bintrayFiles.get(0), destination, packageName);
        extractOwa(downloadedFile);
        downloadedFile.delete();
    }

    private String parseOwaNameFromFile(String name) {
        return name.split("-")[0];
    }

    public static BintrayId parseOwa(String input) {
        String[] tokens = input.split(":");
        if (tokens.length != 2) {
            throw new RuntimeException("Illegal OWA identifier: " + input);
        }
        if (!tokens[0].startsWith(OPENMRS_OWA_PREFIX)) {
            tokens[0] = OPENMRS_OWA_PREFIX + tokens[0];
        }
        return new BintrayId(tokens[0], tokens[1]);
    }

    public void extractOwa(File owaZip) {
        try {
            ZipFile zipFile = new ZipFile(owaZip);
            File outputDir = new File(owaZip.getParentFile(),
                    StringUtils.removeEnd(owaZip.getName(), OWA_PACKAGE_EXTENSION));
            zipFile.extractAll(outputDir.getPath());
        } catch (ZipException e) {
            throw new RuntimeException(e);
        }
    }

    public BintrayPackage getPackageMetadata(String repository, String name) {
        return getPackageMetadata(OPENMRS_USERNAME, repository, name);
    }

    public List<BintrayId> getMavenAvailablePackages(String repo) {
        return getAvailablePackages(OPENMRS_USERNAME, OPENMRS_MAVEN_REPO);
    }

    public BintrayPackage createPackage(MavenProject mavenProject, String repository) {
        CreatePackageRequest request = new CreatePackageRequest();
        request.setName(mavenProject.getArtifactId());
        request.setDescription(mavenProject.getDescription());

        String githubUrl = mavenProject.getScm().getUrl();
        if (githubUrl.endsWith("/"))
            githubUrl = StringUtils.stripEnd(githubUrl, "/");
        String githubRepo = githubUrl.substring(githubUrl.lastIndexOf("/")).replace(".git", "");
        request.setVcsUrl(githubUrl + (githubUrl.endsWith(".git") ? "" : ".git"));
        request.setGithubRepo(OPENMRS_USERNAME + githubRepo);
        request.setWebsiteUrl("http://openmrs.org/");

        request.setIssueTrackerUrl(new DefaultJira().getJiraUrl());
        //so far all OpenMRS projects have MPL-2.0 license
        request.setLicenses(Arrays.asList("MPL-2.0"));
        return createPackage(OPENMRS_USERNAME, repository, request);
    }

    /**
     * creates new version of omod package and uploads the file
     */
    public void uploadOmod(BintrayPackage bintrayPackage, String targetPath, File omodFile, String version) {
        uploadFile(bintrayPackage, targetPath, version, omodFile);
    }

    public void publishOpenmrsPackageVersion(String repository, String packageName, String versionName) {
        publishVersion(OPENMRS_USERNAME, repository, packageName, versionName);
    }
}