All pastes #74828 Raw Edit

Stuff

public text v1 · immutable
#74828 ·published 2006-06-29 14:34 UTC
rendered paste body
/*
 * Copyright 2005-2006 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.servicemix.maven.plugin.jbi;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectBuilder;
import org.apache.maven.project.ProjectBuildingException;

/**
 * A Mojo that can take any project and determine its JBI dependencies and then
 * install it and its dependencies using the JBI deployment tasks
 * 
 * @author <a href="pdodds@apache.org">Philip Dodds</a>
 * @version $Id: GenerateComponentDescriptorMojo 314956 2005-10-12 16:27:15Z
 *          brett $
 * @goal projectInstall
 * @requiresDependencyResolution runtime
 * @description installs the project (and all dependencies) to a local
 *              ServiceMix instance
 */
public class JbiProjectDeployerMojo extends AbstractJbiMojo {

	private List deploymentTypes;

	/**
	 * @parameter default-value="${project}"
	 */
	private MavenProject project;

	/**
	 * @component
	 */
	private MavenProjectBuilder pb;

	/**
	 * @parameter default-value="${localRepository}"
	 */
	private ArtifactRepository localRepo;

	/**
	 * @parameter default-value="${project.remoteArtifactRepositories}"
	 */
	private List remoteRepos;

	public void execute() throws MojoExecutionException, MojoFailureException {

		getLog().debug(" ======= JbiProjectDeployerMojo settings =======");

		if (!getDeployablePackagingTypes().contains(project.getPackaging())) {
			throw new MojoExecutionException(
					"Project must be of packaging type ["
							+ getDeployablePackagingTypes() + "]");
		}

		List dependencies = resolveDependencies(project);
		getLog().info(
				project.getName() + " has " + dependencies.size()
						+ " child dependencies");
		for (Iterator iter = dependencies.iterator(); iter.hasNext();) {
			getLog().info("Deploying " + iter.next());
		}

	}

	private List getDeployablePackagingTypes() {
		if (deploymentTypes == null) {
			deploymentTypes = new ArrayList();
			deploymentTypes.add("jbi-shared-library");
			deploymentTypes.add("jbi-service-assembly");
			deploymentTypes.add("jbi-component");
		}
		return deploymentTypes;
	}

	private Collection resolveArtifact(Artifact artifact) {
		MavenProject project = null;
		List dependencies = new ArrayList();
		try {
			project = pb.buildFromRepository(artifact, remoteRepos, localRepo,
					true);			
		} catch (ProjectBuildingException e) {
			getLog().warn(
					"Unable to determine packaging for dependency : "
							+ artifact.getArtifactId() + " assuming jar");
		}

		if (project != null) {
			if (getDeployablePackagingTypes().contains(project.getPackaging())) {

				// So why is this always 0
				project.getAttachedArtifacts().size();

				dependencies.add(resolveDeploymentPackage(project));
				dependencies.addAll(resolveDependencies(project));
			}
		}
		return dependencies;
	}

	private List resolveDependencies(MavenProject project) {
		List dependencies = new ArrayList();
		for (Iterator iter = project.getArtifacts().iterator(); iter.hasNext();) {
			Artifact artifact = (Artifact) iter.next();
			dependencies.addAll(resolveArtifact(artifact));
		}
		return dependencies;
	}

	private File resolveDeploymentPackage(MavenProject project) {
		// So why is this always 0
		project.getAttachedArtifacts().size();
		getLog().info(
				"Artifacts = " + project.getArtifacts().size() + " "
						+ project.getExtensionArtifacts().size());
		return null;
	}
}