Package com.puppetlabs.geppetto.forge.maven.plugin

Source Code of com.puppetlabs.geppetto.forge.maven.plugin.PomMetadataExtractor

/**
* Copyright (c) 2013 Puppet Labs, Inc. and other contributors, as listed below.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*   Puppet Labs
*/
package com.puppetlabs.geppetto.forge.maven.plugin;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.Restriction;
import org.apache.maven.model.Scm;
import org.apache.maven.project.MavenProject;

import com.google.inject.Inject;
import com.puppetlabs.geppetto.diagnostic.Diagnostic;
import com.puppetlabs.geppetto.diagnostic.FileDiagnostic;
import com.puppetlabs.geppetto.forge.impl.AbstractMetadataExtractor;
import com.puppetlabs.geppetto.forge.model.Dependency;
import com.puppetlabs.geppetto.forge.model.Metadata;
import com.puppetlabs.geppetto.forge.model.ModuleName;
import com.puppetlabs.geppetto.semver.Version;
import com.puppetlabs.geppetto.semver.VersionRange;
import com.puppetlabs.geppetto.validation.ValidationService;

public class PomMetadataExtractor extends AbstractMetadataExtractor {

  @Inject
  private MavenProject mavenProject;

  @Override
  public boolean canExtractFrom(File moduleDirectory, FileFilter filter) {
    // @fmtOff
    return mavenProject != null
      && mavenProject.getFile() != null
      && filter.accept(mavenProject.getFile())
      && "puppet-module".equals(mavenProject.getPackaging())
      && moduleDirectory != null
      && filter.accept(moduleDirectory)
      && moduleDirectory.equals(mavenProject.getFile().getParentFile());
    // @fmtOn
  }

  @Override
  public int getCardinal() {
    return 20;
  }

  @Override
  public String getPrimarySource() {
    return "pom.xml";
  }

  @Override
  public Metadata performMetadataExtraction(File existingFile, Diagnostic result) throws IOException {
    Metadata metadata = new Metadata();
    String gid = mavenProject.getGroupId();
    String owner = gid.substring(gid.lastIndexOf('.') + 1);
    metadata.setName(ModuleName.create(owner, mavenProject.getArtifactId(), true));
    metadata.setVersion(Version.create(mavenProject.getVersion()));
    metadata.setSummary(mavenProject.getName());

    Scm scm = mavenProject.getScm();
    if(scm != null)
      metadata.setSource(scm.getUrl());

    metadata.setProjectPage(mavenProject.getUrl());

    List<Dependency> forgeDeps = null;
    for(org.apache.maven.model.Dependency dep : mavenProject.getDependencies()) {
      if("test".equals(dep.getScope()))
        continue;

      try {
        org.apache.maven.artifact.versioning.VersionRange vr = org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec(dep.getVersion());
        List<Restriction> restrictions = vr.getRestrictions();
        if(restrictions.size() == 1) {
          Restriction r = restrictions.get(0);
          Version lower = r.getLowerBound() == null
              ? Version.MIN
              : Version.create(r.getLowerBound().toString());
          Version upper = r.getUpperBound() == null
              ? Version.MAX
              : Version.create(r.getUpperBound().toString());

          Dependency forgeDep = new Dependency();
          String dgid = mavenProject.getGroupId();
          String downer = dgid.substring(dgid.lastIndexOf('.') + 1);
          forgeDep.setName(ModuleName.create(downer, dep.getArtifactId(), true));
          forgeDep.setVersionRequirement(VersionRange.create(
            lower, r.isLowerBoundInclusive(), upper, r.isUpperBoundInclusive()));

          if(forgeDeps == null)
            forgeDeps = new ArrayList<Dependency>();
          forgeDeps.add(forgeDep);
        }
      }
      catch(InvalidVersionSpecificationException e) {
        result.addChild(new FileDiagnostic(
          Diagnostic.WARNING, ValidationService.GEPPETTO, e.getMessage(), mavenProject.getFile()));
      }
    }
    metadata.setDependencies(forgeDeps);
    return metadata;
  }
}
TOP

Related Classes of com.puppetlabs.geppetto.forge.maven.plugin.PomMetadataExtractor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.