package org.jboss.windup.rules.apps.java.scan.provider; import org.apache.commons.lang3.StringUtils; import org.jboss.windup.config.AbstractRuleProvider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.metadata.RuleMetadata; import org.jboss.windup.config.operation.iteration.AbstractIterationOperation; import org.jboss.windup.config.phase.DiscoverProjectStructurePhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.ArchiveModel; import org.jboss.windup.graph.model.ProjectModel; import org.jboss.windup.rules.apps.java.model.JarManifestModel; import org.jboss.windup.rules.apps.java.service.JarManifestService; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.context.EvaluationContext; /** * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @RuleMetadata(phase = DiscoverProjectStructurePhase.class, after = DiscoverNonMavenArchiveProjectsRuleProvider.class) public class DiscoverAdditionalProjectDetails extends AbstractRuleProvider { @Override public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext) { return ConfigurationBuilder.begin() .addRule() .when(Query.fromType(ArchiveModel.class)) .perform(new AbstractIterationOperation<ArchiveModel>() { @Override public void perform(GraphRewrite event, EvaluationContext context, ArchiveModel payload) { getAdditionalProjectDetails(event.getGraphContext(), payload); } }); } private void getAdditionalProjectDetails(GraphContext context, ArchiveModel archiveModel) { ProjectModel projectModel = archiveModel.getProjectModel(); /* * This likely means that we were ignoring the project or did not analyze it for some other reason. * * Just skip it in this case */ if (projectModel == null) return; JarManifestService service = new JarManifestService(context); Iterable<JarManifestModel> manifests = service.getManifestsByArchive(archiveModel); // get any properties from the manifest files that we don't already have from other sources (eg, maven pom) for (JarManifestModel manifest : manifests) { if (StringUtils.isNotBlank(manifest.getName()) && (projectModel.getName() == null || projectModel.getName().equals(archiveModel.getArchiveName()))) { projectModel.setName(manifest.getName()); } if (StringUtils.isNotBlank(manifest.getVendor()) && StringUtils.isBlank(projectModel.getOrganization())) { projectModel.setOrganization(manifest.getVendor()); } if (StringUtils.isNotBlank(manifest.getVersion()) && StringUtils.isBlank(projectModel.getVersion())) { projectModel.setVersion(manifest.getVersion()); } if (StringUtils.isNotBlank(manifest.getDescription()) && StringUtils.isBlank(projectModel.getDescription())) { projectModel.setDescription(manifest.getDescription()); } } } }