Search in sources :

Example 31 with ArtifactDescriptor

use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.

the class LicenseFeatureHelper method getLicenseFeature.

/**
 * Get the license feature jar for feature (or <code>null</code> if it has no license feature).
 *
 * See {@linkplain http://wiki.eclipse.org/Equinox/p2/License_Mechanism }.
 *
 * @param feature
 *            original feature
 * @param mavenProject
 *            original feature project
 * @return the license feature jar
 */
public File getLicenseFeature(Feature feature, MavenProject mavenProject) {
    String id = feature.getLicenseFeature();
    if (id == null) {
        return null;
    }
    ArtifactDescriptor licenseFeature = TychoProjectUtils.getDependencyArtifacts(mavenProject).getArtifact(ArtifactType.TYPE_ECLIPSE_FEATURE, id, feature.getLicenseFeatureVersion());
    if (licenseFeature == null) {
        throw new IllegalStateException("License feature with id " + id + " is not found among project dependencies");
    }
    ReactorProject licenseProject = licenseFeature.getMavenProject();
    if (licenseProject == null) {
        return licenseFeature.getLocation();
    }
    File artifact = licenseProject.getArtifact();
    if (!artifact.isFile()) {
        throw new IllegalStateException("At least ''package'' phase need to be executed");
    }
    return artifact;
}
Also used : ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) ReactorProject(org.eclipse.tycho.ReactorProject) File(java.io.File) ZipFile(java.util.zip.ZipFile)

Example 32 with ArtifactDescriptor

use of org.eclipse.tycho.ArtifactDescriptor in project tycho by eclipse.

the class BuildQualifierAggregatorMojo method getBuildTimestamp.

@Override
protected Date getBuildTimestamp() throws MojoExecutionException {
    Date timestamp = super.getBuildTimestamp();
    if (timestampProvider == null) {
        // no included bundle/feature can have more recent timestamp
        return timestamp;
    }
    final Date[] latestTimestamp = new Date[] { timestamp };
    TychoProject projectType = projectTypes.get(project.getPackaging());
    if (projectType == null) {
        throw new IllegalStateException("Unknown or unsupported packaging type " + packaging);
    }
    final ReactorProject thisProject = DefaultReactorProject.adapt(project);
    projectType.getDependencyWalker(project).walk(new ArtifactDependencyVisitor() {

        @Override
        public boolean visitFeature(FeatureDescription feature) {
            if (feature.getFeatureRef() == null || thisProject.equals(feature.getMavenProject())) {
                // visit immediately included features
                return true;
            }
            visitArtifact(feature);
            // do not visit indirectly included features/bundles
            return false;
        }

        @Override
        public void visitPlugin(PluginDescription plugin) {
            if (plugin.getPluginRef() == null || thisProject.equals(plugin.getMavenProject())) {
                // 'this' bundle
                return;
            }
            visitArtifact(plugin);
        }

        private void visitArtifact(ArtifactDescriptor artifact) {
            ReactorProject otherProject = artifact.getMavenProject();
            String otherVersion = (otherProject != null) ? otherProject.getExpandedVersion() : artifact.getKey().getVersion();
            Version v = Version.parseVersion(otherVersion);
            String otherQualifier = v.getQualifier();
            if (otherQualifier != null) {
                Date timestamp = parseQualifier(otherQualifier);
                if (timestamp != null) {
                    if (latestTimestamp[0].compareTo(timestamp) < 0) {
                        if (getLog().isDebugEnabled()) {
                            getLog().debug("Found '" + format.format(timestamp) + "' from qualifier '" + otherQualifier + "' for artifact " + artifact);
                        }
                        latestTimestamp[0] = timestamp;
                    }
                } else {
                    getLog().debug("Could not parse qualifier timestamp " + otherQualifier);
                }
            }
        }

        private Date parseQualifier(String qualifier) {
            Date timestamp = parseQualifier(qualifier, format);
            if (timestamp != null) {
                return timestamp;
            }
            return discoverTimestamp(qualifier);
        }

        private Date parseQualifier(String qualifier, SimpleDateFormat format) {
            ParsePosition pos = new ParsePosition(0);
            Date timestamp = format.parse(qualifier, pos);
            if (timestamp != null && pos.getIndex() == qualifier.length()) {
                return timestamp;
            }
            return null;
        }

        private Date discoverTimestamp(String qualifier) {
            return timestampFinder.findInString(qualifier);
        }
    });
    return latestTimestamp[0];
}
Also used : FeatureDescription(org.eclipse.tycho.core.FeatureDescription) ReactorProject(org.eclipse.tycho.ReactorProject) DefaultReactorProject(org.eclipse.tycho.core.osgitools.DefaultReactorProject) Date(java.util.Date) ArtifactDependencyVisitor(org.eclipse.tycho.core.ArtifactDependencyVisitor) TychoProject(org.eclipse.tycho.core.TychoProject) ArtifactDescriptor(org.eclipse.tycho.ArtifactDescriptor) Version(org.osgi.framework.Version) PluginDescription(org.eclipse.tycho.core.PluginDescription) SimpleDateFormat(java.text.SimpleDateFormat) ParsePosition(java.text.ParsePosition)

Aggregations

ArtifactDescriptor (org.eclipse.tycho.ArtifactDescriptor)32 File (java.io.File)20 ArtifactKey (org.eclipse.tycho.ArtifactKey)13 ReactorProject (org.eclipse.tycho.ReactorProject)10 DependencyArtifacts (org.eclipse.tycho.artifacts.DependencyArtifacts)8 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)5 IOException (java.io.IOException)4 DefaultArtifactKey (org.eclipse.tycho.DefaultArtifactKey)4 DefaultArtifactDescriptor (org.eclipse.tycho.core.osgitools.DefaultArtifactDescriptor)4 DefaultReactorProject (org.eclipse.tycho.core.osgitools.DefaultReactorProject)4 ArrayList (java.util.ArrayList)3 LinkedHashMap (java.util.LinkedHashMap)3 PluginDescription (org.eclipse.tycho.core.PluginDescription)3 Version (org.osgi.framework.Version)3 FileOutputStream (java.io.FileOutputStream)2 HashSet (java.util.HashSet)2 LinkedHashSet (java.util.LinkedHashSet)2 Map (java.util.Map)2 Properties (java.util.Properties)2 ZipFile (java.util.zip.ZipFile)2