Search in sources :

Example 6 with ArtifactDependencyVisitor

use of org.eclipse.tycho.core.ArtifactDependencyVisitor in project tycho by eclipse.

the class ArtifactDependencyWalkerTest method walkProduct.

protected void walkProduct(String productFile, final ArrayList<PluginDescription> plugins, final ArrayList<FeatureDescription> features) throws Exception, IOException, XmlPullParserException {
    DependencyArtifacts platform = getTargetPlatform();
    final ProductConfiguration product = ProductConfiguration.read(new File(productFile));
    ArtifactDependencyWalker walker = new AbstractArtifactDependencyWalker(platform) {

        @Override
        public void walk(ArtifactDependencyVisitor visitor) {
            traverseProduct(product, visitor);
        }
    };
    walker.walk(new ArtifactDependencyVisitor() {

        @Override
        public void visitPlugin(PluginDescription plugin) {
            plugins.add(plugin);
        }

        @Override
        public boolean visitFeature(FeatureDescription feature) {
            features.add(feature);
            return true;
        }
    });
}
Also used : AbstractArtifactDependencyWalker(org.eclipse.tycho.core.osgitools.AbstractArtifactDependencyWalker) DependencyArtifacts(org.eclipse.tycho.artifacts.DependencyArtifacts) ProductConfiguration(org.eclipse.tycho.model.ProductConfiguration) FeatureDescription(org.eclipse.tycho.core.FeatureDescription) AbstractArtifactDependencyWalker(org.eclipse.tycho.core.osgitools.AbstractArtifactDependencyWalker) ArtifactDependencyWalker(org.eclipse.tycho.core.ArtifactDependencyWalker) File(java.io.File) PluginDescription(org.eclipse.tycho.core.PluginDescription) ArtifactDependencyVisitor(org.eclipse.tycho.core.ArtifactDependencyVisitor)

Example 7 with ArtifactDependencyVisitor

use of org.eclipse.tycho.core.ArtifactDependencyVisitor in project tycho by eclipse.

the class EclipseRepositoryProject method newDependencyWalker.

@Override
protected ArtifactDependencyWalker newDependencyWalker(MavenProject project, TargetEnvironment environment) {
    final List<ProductConfiguration> products = loadProducts(project);
    final List<Category> categories = loadCategories(project);
    return new AbstractArtifactDependencyWalker(getDependencyArtifacts(project, environment), getEnvironments(project, environment)) {

        @Override
        public void walk(ArtifactDependencyVisitor visitor) {
            WalkbackPath visited = new WalkbackPath();
            for (ProductConfiguration product : products) {
                traverseProduct(product, visitor, visited);
            }
            for (Category category : categories) {
                for (FeatureRef feature : category.getFeatures()) {
                    traverseFeature(feature, visitor, visited);
                }
            }
        }
    };
}
Also used : ProductConfiguration(org.eclipse.tycho.model.ProductConfiguration) Category(org.eclipse.tycho.model.Category) FeatureRef(org.eclipse.tycho.model.FeatureRef) ArtifactDependencyVisitor(org.eclipse.tycho.core.ArtifactDependencyVisitor)

Example 8 with ArtifactDependencyVisitor

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

ArtifactDependencyVisitor (org.eclipse.tycho.core.ArtifactDependencyVisitor)8 File (java.io.File)4 PluginDescription (org.eclipse.tycho.core.PluginDescription)4 ReactorProject (org.eclipse.tycho.ReactorProject)3 FeatureDescription (org.eclipse.tycho.core.FeatureDescription)3 ProductConfiguration (org.eclipse.tycho.model.ProductConfiguration)3 ArtifactDescriptor (org.eclipse.tycho.ArtifactDescriptor)2 DependencyArtifacts (org.eclipse.tycho.artifacts.DependencyArtifacts)2 ArtifactDependencyWalker (org.eclipse.tycho.core.ArtifactDependencyWalker)2 Feature (org.eclipse.tycho.model.Feature)2 FeatureRef (org.eclipse.tycho.model.FeatureRef)2 UpdateSite (org.eclipse.tycho.model.UpdateSite)2 IOException (java.io.IOException)1 ParsePosition (java.text.ParsePosition)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Date (java.util.Date)1 LinkedHashMap (java.util.LinkedHashMap)1 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)1 MojoFailureException (org.apache.maven.plugin.MojoFailureException)1 ArtifactKey (org.eclipse.tycho.ArtifactKey)1