Search in sources :

Example 6 with TychoProject

use of org.eclipse.tycho.core.TychoProject 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

TychoProject (org.eclipse.tycho.core.TychoProject)6 File (java.io.File)3 MavenProject (org.apache.maven.project.MavenProject)3 ArtifactKey (org.eclipse.tycho.ArtifactKey)2 ReactorProject (org.eclipse.tycho.ReactorProject)2 DefaultReactorProject (org.eclipse.tycho.core.osgitools.DefaultReactorProject)2 Version (org.osgi.framework.Version)2 ParsePosition (java.text.ParsePosition)1 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 Properties (java.util.Properties)1 Artifact (org.apache.maven.artifact.Artifact)1 ArtifactRepository (org.apache.maven.artifact.repository.ArtifactRepository)1 ArtifactResolutionRequest (org.apache.maven.artifact.resolver.ArtifactResolutionRequest)1 ArtifactResolutionResult (org.apache.maven.artifact.resolver.ArtifactResolutionResult)1 Dependency (org.apache.maven.model.Dependency)1 Plugin (org.apache.maven.model.Plugin)1 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)1 ProjectArtifact (org.apache.maven.project.artifact.ProjectArtifact)1