| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 npanday.plugin.libraryimporter.generate; |
| |
| import com.google.common.base.Splitter; |
| import com.google.common.base.Strings; |
| import com.google.common.collect.Lists; |
| import npanday.plugin.libraryimporter.NuspecMetadata; |
| import npanday.plugin.libraryimporter.model.NugetPackage; |
| import npanday.plugin.libraryimporter.model.NugetPackageLibrary; |
| import npanday.plugin.libraryimporter.skeletons.AbstractLibraryImportsProvidingMojo; |
| import org.apache.maven.model.Build; |
| import org.apache.maven.model.Dependency; |
| import org.apache.maven.model.Developer; |
| import org.apache.maven.model.License; |
| import org.apache.maven.model.Model; |
| import org.apache.maven.model.Plugin; |
| import org.apache.maven.model.io.xpp3.MavenXpp3Writer; |
| import org.apache.maven.plugin.MojoExecutionException; |
| import org.apache.maven.plugin.MojoFailureException; |
| import org.codehaus.plexus.util.FileUtils; |
| import org.codehaus.plexus.util.IOUtil; |
| import org.codehaus.plexus.util.WriterFactory; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.Writer; |
| import java.util.List; |
| |
| /** |
| * Generates the poms and copies the libs to corresponding temp folders. |
| * |
| * @author <a href="mailto:lcorneliussen@apache.org">Lars Corneliussen</a> |
| * @goal generate-package-artifacts |
| */ |
| public class GeneratePackageArtifactsMojo |
| extends AbstractLibraryImportsProvidingMojo |
| { |
| /** |
| * @parameter default-value="${project.build.directory}/generated-projects" |
| */ |
| protected File generatedProjectsDirectory; |
| |
| @Override |
| protected void innerExecute() throws MojoExecutionException, MojoFailureException |
| { |
| super.innerExecute(); |
| |
| List<NugetPackageLibrary> imports = Lists.newArrayList(); |
| |
| List<NugetPackage> nugetImports = Lists.newArrayList( getNugetImports() ); |
| |
| for ( NugetPackage nuget : nugetImports ) |
| { |
| try |
| { |
| nuget.resolveDependencies( nugetImports ); |
| } |
| catch (MojoExecutionException e) |
| { |
| throw new MojoExecutionException( |
| "NPANDAY-141-004: Could not satisfy dependency for " + nuget + ".", e |
| ); |
| } |
| } |
| |
| for ( NugetPackage nuget : nugetImports ) |
| { |
| for ( NugetPackageLibrary lib : nuget.getLibraries(getLog(), mavenProjectsCacheDirectory) ) |
| { |
| imports.add( lib ); |
| } |
| } |
| |
| for( NugetPackageLibrary lib : imports){ |
| |
| lib.resolveDependenciesFrom(imports); |
| |
| Model model = generateModel(lib.getNugetPackage().getNuspec(), lib); |
| |
| storePomFile( model, lib.getMavenPomFile() ); |
| |
| File target = lib.getMavenProjectFolder(); |
| |
| try |
| { |
| FileUtils.copyFileToDirectory( lib.getFile(), target ); |
| } |
| catch ( IOException e ) |
| { |
| throw new MojoExecutionException( |
| "NPANDAY-141-002: Error on copy file " + lib.getFile() + " to " + target, e |
| ); |
| } |
| } |
| |
| } |
| |
| Splitter AUTHORS_SPLITTER = Splitter.on( "," ).omitEmptyStrings().trimResults(); |
| |
| private Model generateModel( NuspecMetadata nugetPackage, NugetPackageLibrary lib ) throws |
| MojoExecutionException |
| { |
| Model model = new Model(); |
| |
| model.setModelVersion( "4.0.0" ); |
| |
| model.setGroupId( lib.getMavenGroupId() ); |
| model.setArtifactId( lib.getMavenArtifactId() ); |
| model.setVersion( lib.getMavenVersion() ); |
| |
| model.setBuild( new Build() ); |
| model.getBuild().setFinalName( model.getArtifactId() ); |
| |
| if ( !Strings.isNullOrEmpty( nugetPackage.getTitle() ) ) |
| { |
| model.setName( nugetPackage.getTitle()); |
| } |
| else |
| { |
| model.setName( nugetPackage.getId() ); |
| } |
| |
| model.setName( model.getName() + " :: " + model.getArtifactId() ); |
| |
| if ( !Strings.isNullOrEmpty( nugetPackage.getProjectUrl() ) ) |
| { |
| model.setUrl( nugetPackage.getProjectUrl() ); |
| } |
| |
| |
| if ( !Strings.isNullOrEmpty( nugetPackage.getSummary() ) ) |
| { |
| model.setDescription( nugetPackage.getSummary() ); |
| } |
| else if ( !Strings.isNullOrEmpty( nugetPackage.getDescription() ) ) |
| { |
| model.setDescription( nugetPackage.getDescription() ); |
| } |
| |
| if ( !Strings.isNullOrEmpty( nugetPackage.getLicenseUrl() ) ) |
| { |
| License lic = new License(); |
| lic.setUrl( nugetPackage.getLicenseUrl() ); |
| model.getLicenses().add( lic ); |
| } |
| |
| if ( !Strings.isNullOrEmpty( nugetPackage.getAuthors() ) ) |
| { |
| for ( String author : AUTHORS_SPLITTER.split( nugetPackage.getAuthors() ) ) |
| { |
| Developer dev = new Developer(); |
| dev.setName( author ); |
| model.addDeveloper( dev ); |
| } |
| } |
| |
| model.setPackaging( lib.getMavenPackaging() ); |
| |
| for( NugetPackageLibrary libDep : lib.getDependencies()){ |
| |
| Dependency dep = new Dependency(); |
| dep.setGroupId( libDep.getMavenGroupId() ); |
| dep.setArtifactId( libDep.getMavenArtifactId() ); |
| dep.setType( libDep.getMavenPackaging() ); |
| |
| // TODO: should this actually be a range? |
| dep.setVersion( libDep.getMavenVersion() ); |
| |
| model.getDependencies().add( dep ); |
| } |
| |
| return model; |
| } |
| |
| private void storePomFile( Model model, File pomFile ) throws MojoExecutionException |
| { |
| pomFile.getParentFile().mkdirs(); |
| |
| Writer writer = null; |
| try |
| { |
| writer = WriterFactory.newXmlWriter( pomFile ); |
| new MavenXpp3Writer().write( writer, model ); |
| } |
| catch ( IOException e ) |
| { |
| throw new MojoExecutionException( "NPANDAY-141-003: Error writing POM file: " + e.getMessage(), e ); |
| } |
| finally |
| { |
| IOUtil.close( writer ); |
| } |
| } |
| } |