Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package com.google.cloud.tools.opensource.cloudbomdashboard;

import com.google.cloud.tools.opensource.dependencies.RepositoryUtility;
import com.google.common.collect.ImmutableList;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
Expand All @@ -25,21 +27,34 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.building.DefaultModelBuilderFactory;
import org.apache.maven.model.building.DefaultModelBuildingRequest;
import org.apache.maven.model.building.ModelBuilder;
import org.apache.maven.model.building.ModelBuildingException;
import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.project.ProjectModelResolver;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
import org.eclipse.aether.repository.RemoteRepository;

/** Container class for all artifact data pulled from Maven central. */
public class ArtifactMavenData {

private static DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
private static DateFormat outputFormat = new SimpleDateFormat("MM-dd-yyyy");

private static final Logger LOGGER = Logger.getLogger(ArtifactMavenData.class.getName());

private final Artifact artifact;

private final String latestVersion,
Expand Down Expand Up @@ -220,21 +235,33 @@ private static String getSharedDependenciesVersionFromUrl(String pomUrl) {
FileUtils.copyInputStreamToFile(input, pomFile);
MavenXpp3Reader read = new MavenXpp3Reader();
Model model = read.read(new FileInputStream(pomFile));
if (model.getDependencyManagement() == null) {
return null;
}
for (Dependency dep : model.getDependencyManagement().getDependencies()) {
if ("com.google.cloud".equals(dep.getGroupId())
&& "google-cloud-shared-dependencies".equals(dep.getArtifactId())) {
if (dep.getVersion().startsWith("${")) {
String sharedVersion = dep.getVersion().substring(1).replaceAll("[{}]", "");
return model.getProperties().getProperty(sharedVersion);
}
return dep.getVersion();
}
}

} catch (XmlPullParserException | IOException ignored) {
ModelBuildingRequest request = new DefaultModelBuildingRequest();
request.setRawModel(model);
RepositorySystem repositorySystem = RepositoryUtility.newRepositorySystem();
RepositorySystemSession session = RepositoryUtility.newSession(repositorySystem);

// Set model resolver to locate parent POM on Maven Central.
RemoteRepository mavenCentral =
new RemoteRepository.Builder("central", "default", "https://repo1.maven.org/maven2/")
.build();
request.setModelResolver(
new ProjectModelResolver(
session,
null,
repositorySystem,
new DefaultRemoteRepositoryManager(),
ImmutableList.of(mavenCentral),
null,
null));

// Capture java version from system environment for profile activation.
request.setSystemProperties(System.getProperties());

ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
Model effectiveModel = builder.build(request).getEffectiveModel();
return effectiveModel.getProperties().getProperty("google-cloud-shared-dependencies.version");
} catch (XmlPullParserException | IOException | ModelBuildingException exception) {
LOGGER.log(Level.SEVERE, exception, () -> "Failed to parse contents of POM file: " + pomUrl);
}
return null;
}
Expand Down