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

org.jboss.narayana.blacktie.plugins.AddCommonSources Maven / Gradle / Ivy

There is a newer version: 5.12.0.Final
Show newest version
package org.jboss.narayana.blacktie.plugins;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Reference;

public class AddCommonSources extends Task {

	private Reference mavenProjectRef;
	private String outputDir = "target";
	private String includes = ".*";

	public void execute() throws BuildException {
		MavenProject p = (MavenProject) mavenProjectRef.getProject()
				.getReference(mavenProjectRef.getRefId());
		processResources(p);
	}

	public void setMavenProject(Reference ref) {
		this.mavenProjectRef = ref;
	}

	public void setOutputDir(String outDir) {
		this.outputDir = outDir;
	}

	/**
	 * Pattern for matching which resources get included. See
	 * java.util.regex.Pattern for valid pattern syntax.
	 */
	public void setIncludes(String includes) {
		this.includes = includes;
	}

	private void processResources(MavenProject p) {
		List resources = p.getResources();

		if (resources != null) {
			for (Iterator i = resources.iterator(); i.hasNext();) {
				Resource resource = (Resource) i.next();
				String resourceRoot = resource.getDirectory();
				// System.out.println("adding source root: " + outputDir +
				// " from resource " + resource.toString());
				unzip(getClass().getResourceAsStream("/cxx.jar"), outputDir,
						includes);
				// p.addCompileSourceRoot(outputDir);
				p.addTestCompileSourceRoot(outputDir);
			}
		}
	}

	private static void unzip(InputStream from, String to, String pattern) {
		// System.out.println("from: " + from + " to: " + to + " pattern: " +
		// pattern);
		if (from == null || to == null)
			return;

		try {
			ZipInputStream zs = new ZipInputStream(from);
			ZipEntry ze;

			while ((ze = zs.getNextEntry()) != null) {
				String fname = to + '/' + ze.getName();
				// System.out.println(fname);
				boolean match = (pattern == null || ze.getName().matches(
						pattern));

				if (ze.isDirectory())
					new File(fname).mkdirs();
				else if (match)
					externalizeFile(fname, zs);
				else
					readFile(fname, zs);

				zs.closeEntry();
			}

			zs.close();
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("Unable to unpack archive: "
					+ e.getMessage());
		}
	}

	private static void readFile(String fname, InputStream is)
			throws IOException {
		File f = new File(fname);
		byte[] buf = new byte[1024];
		int len;

		while ((len = is.read(buf)) > 0)
			;
	}

	private static File externalizeFile(String fname, InputStream is)
			throws IOException {
		File f = new File(fname);
		OutputStream out = new FileOutputStream(f);
		byte[] buf = new byte[1024];
		int len;

		while ((len = is.read(buf)) > 0)
			out.write(buf, 0, len);

		out.close();

		return f;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy