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

org.hyperledger.composer.bna.plugin.BnaGeneratorPlugin Maven / Gradle / Ivy

/*
 * Copyright IBM Corp. 2017 All Rights Reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

package org.hyperledger.composer.bna.plugin;

import org.gradle.api.DefaultTask;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.tasks.TaskAction;
import org.hyperledger.composer.bna.util.BnaGenerator;
import org.hyperledger.composer.bna.util.JavaParser;
import org.hyperledger.composer.bna.util.ZipHolder;

import java.io.File;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.List;

public class BnaGeneratorPlugin extends DefaultTask implements Plugin {

	@Override
	public void apply(Project project) {
		project.getExtensions().create("bna", BNAGeneratorExtension.class, project);
		project.getTasks().create("generate", BnaGeneratorPlugin.class)
				.dependsOn(project.getTasksByName("classes", false))
				.setGroup("bna");
	}

	@TaskAction
	public void generate() throws Exception {
		BNAGeneratorExtension extension = getProject().getExtensions().getByType(BNAGeneratorExtension.class);
		FileOutputStream bnaOutputStream = new FileOutputStream(extension.getOutputDir());
		JavaParser javaParser = new JavaParser(getSourceFiles());
		ZipHolder zipHolder = new ZipHolder(bnaOutputStream);
		String name = getProject().getName();
		String version = getProject().getVersion().toString();
		String description = extension.getDescription();
		BnaGenerator bnaGenerator = new BnaGenerator(javaParser, zipHolder, name, version, description);
		bnaGenerator.generate();
	}

	private List getSourceFiles() {
		List sourceFiles = new LinkedList<>();
		getProject().getConfigurations().findByName("runtime").forEach(sourceFiles::add);
		getProject().getConvention().getPlugin(JavaPluginConvention.class).getSourceSets()
				.getByName("main").getOutput().getClassesDirs().forEach(sourceFiles::add);
		return sourceFiles;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy