Skip to content

Commit

Permalink
refactor(bazel): delegate gav string parsing to BazelDependencyParser
Browse files Browse the repository at this point in the history
  • Loading branch information
Steve Billings committed Oct 7, 2019
1 parent de24e0e commit 760fdba
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 17 deletions.
@@ -0,0 +1,51 @@
/**
* detectable
*
* Copyright (c) 2019 Synopsys, Inc.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.synopsys.integration.detectable.detectables.bazel;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.synopsys.integration.bdio.model.dependency.Dependency;
import com.synopsys.integration.bdio.model.externalid.ExternalId;
import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory;

public class BazelDependencyParser {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final ExternalIdFactory externalIdFactory;

public BazelDependencyParser(final ExternalIdFactory externalIdFactory) {
this.externalIdFactory = externalIdFactory;
}

public Dependency gavStringToDependency(final String artifactString, final String separatorRegex) {
final String[] gavParts = artifactString.split(separatorRegex);
final String group = gavParts[0];
final String artifact = gavParts[1];
final String version = gavParts[2];

logger.debug(String.format("Adding dependency from external id: %s:%s:%s", group, artifact, version));
final ExternalId externalId = externalIdFactory.createMavenExternalId(group, artifact, version);
final Dependency artifactDependency = new Dependency(artifact, version, externalId);
return artifactDependency;
}
}
Expand Up @@ -34,8 +34,6 @@
import com.synopsys.integration.bdio.graph.MutableDependencyGraph;
import com.synopsys.integration.bdio.graph.MutableMapDependencyGraph;
import com.synopsys.integration.bdio.model.dependency.Dependency;
import com.synopsys.integration.bdio.model.externalid.ExternalId;
import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory;
import com.synopsys.integration.detectable.Extraction;
import com.synopsys.integration.detectable.detectable.codelocation.CodeLocation;
import com.synopsys.integration.detectable.detectable.executable.ExecutableRunner;
Expand All @@ -48,13 +46,13 @@
public class BazelExtractor {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final ExecutableRunner executableRunner;
private final ExternalIdFactory externalIdFactory;
private final BazelDependencyParser bazelDependencyParser;
private final WorkspaceRuleChooser workspaceRuleChooser;

public BazelExtractor(final ExecutableRunner executableRunner,
final ExternalIdFactory externalIdFactory, final WorkspaceRuleChooser workspaceRuleChooser) {
final BazelDependencyParser bazelDependencyParser, final WorkspaceRuleChooser workspaceRuleChooser) {
this.executableRunner = executableRunner;
this.externalIdFactory = externalIdFactory;
this.bazelDependencyParser = bazelDependencyParser;
this.workspaceRuleChooser = workspaceRuleChooser;
}

Expand Down Expand Up @@ -93,18 +91,12 @@ public Extraction extract(final File bazelExe, final File workspaceDir, final Ba
@NotNull
private MutableDependencyGraph gavStringsToDependencyGraph(final List<String> gavStrings) {
final MutableDependencyGraph dependencyGraph = new MutableMapDependencyGraph();
for (String artifactString : gavStrings) {
final String[] gavParts = artifactString.split(":");
final String group = gavParts[0];
final String artifact = gavParts[1];
final String version = gavParts[2];
for (String gavString : gavStrings) {
final Dependency artifactDependency = bazelDependencyParser.gavStringToDependency(gavString, ":");
try {
logger.debug(String.format("Adding dependency from external id: %s:%s:%s", group, artifact, version));
final ExternalId externalId = externalIdFactory.createMavenExternalId(group, artifact, version);
final Dependency artifactDependency = new Dependency(artifact, version, externalId);
dependencyGraph.addChildToRoot(artifactDependency);
} catch (final Exception e) {
logger.error(String.format("Unable to create dependency from %s:%s:%s", group, artifact, version));
logger.error(String.format("Unable to create dependency from %s", gavString));
}
}
return dependencyGraph;
Expand Down
@@ -0,0 +1,31 @@
package com.synopsys.integration.detectable.detectables.bazel.functional.bazel;

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import com.synopsys.integration.bdio.model.Forge;
import com.synopsys.integration.bdio.model.dependency.Dependency;
import com.synopsys.integration.bdio.model.externalid.ExternalId;
import com.synopsys.integration.bdio.model.externalid.ExternalIdFactory;
import com.synopsys.integration.detectable.detectables.bazel.BazelDependencyParser;

public class BazelDependencyParserTest {

@Test
public void test() {
final ExternalIdFactory externalIdFactory = Mockito.mock(ExternalIdFactory.class);
final BazelDependencyParser bazelDependencyParser = new BazelDependencyParser(externalIdFactory);
// externalIdFactory.createMavenExternalId(group, artifact, version);
final ExternalId testExternalId = new ExternalId(Forge.MAVEN);
testExternalId.group = "testgroup";
testExternalId.name = "testartifact";
testExternalId.version = "testversion";
Mockito.when(externalIdFactory.createMavenExternalId("testgroup", "testartifact", "testversion")).thenReturn(testExternalId);

final Dependency dependency = bazelDependencyParser.gavStringToDependency("testgroup:testartifact:testversion", ":");

assertEquals("testartifact", dependency.externalId.name);
}
}
Expand Up @@ -17,6 +17,7 @@
import com.synopsys.integration.detectable.detectable.executable.ExecutableOutput;
import com.synopsys.integration.detectable.detectable.executable.ExecutableRunner;
import com.synopsys.integration.detectable.detectable.executable.ExecutableRunnerException;
import com.synopsys.integration.detectable.detectables.bazel.BazelDependencyParser;
import com.synopsys.integration.detectable.detectables.bazel.BazelExtractor;
import com.synopsys.integration.detectable.detectables.bazel.BazelProjectNameGenerator;
import com.synopsys.integration.detectable.detectables.bazel.BazelWorkspace;
Expand Down Expand Up @@ -60,7 +61,7 @@ public void testMavenJar() throws ExecutableRunnerException, IntegrationExceptio
Mockito.when(bazelWorkspace.getDependencyRule()).thenReturn(WorkspaceRule.MAVEN_JAR);
final WorkspaceRuleChooser workspaceRuleChooser = Mockito.mock(WorkspaceRuleChooser.class);
Mockito.when(workspaceRuleChooser.choose(Mockito.eq(WorkspaceRule.MAVEN_JAR), Mockito.isNull())).thenReturn(WorkspaceRule.MAVEN_JAR);
final BazelExtractor bazelExtractor = new BazelExtractor(executableRunner, externalIdFactory, workspaceRuleChooser);
final BazelExtractor bazelExtractor = new BazelExtractor(executableRunner, new BazelDependencyParser(externalIdFactory), workspaceRuleChooser);
final File bazelExe = new File("/usr/bin/bazel");

// bazel query 'filter("@.*:jar", deps(//:ProjectRunner))'
Expand Down Expand Up @@ -128,7 +129,7 @@ public void testMavenInstall() throws ExecutableRunnerException, IntegrationExce
Mockito.when(bazelWorkspace.getDependencyRule()).thenReturn(WorkspaceRule.MAVEN_INSTALL);
final WorkspaceRuleChooser workspaceRuleChooser = Mockito.mock(WorkspaceRuleChooser.class);
Mockito.when(workspaceRuleChooser.choose(Mockito.eq(WorkspaceRule.MAVEN_INSTALL), Mockito.isNull())).thenReturn(WorkspaceRule.MAVEN_INSTALL);
final BazelExtractor bazelExtractor = new BazelExtractor(executableRunner, externalIdFactory, workspaceRuleChooser);
final BazelExtractor bazelExtractor = new BazelExtractor(executableRunner, new BazelDependencyParser(externalIdFactory), workspaceRuleChooser);
final File bazelExe = new File("/usr/bin/bazel");

// bazel cquery --noimplicit_deps "kind(j.*import, deps(//:ProjectRunner))" --output build
Expand Down
Expand Up @@ -63,6 +63,7 @@
import com.synopsys.integration.detectable.detectable.inspector.GradleInspectorResolver;
import com.synopsys.integration.detectable.detectable.inspector.PipInspectorResolver;
import com.synopsys.integration.detectable.detectable.inspector.nuget.NugetInspectorResolver;
import com.synopsys.integration.detectable.detectables.bazel.BazelDependencyParser;
import com.synopsys.integration.detectable.detectables.bazel.BazelDetectable;
import com.synopsys.integration.detectable.detectables.bazel.BazelExtractor;
import com.synopsys.integration.detectable.detectables.bazel.pipeline.WorkspaceRuleChooser;
Expand Down Expand Up @@ -241,7 +242,8 @@ public DetectableFactory detectableFactory() {
@Bean
public BazelExtractor bazelExtractor() {
final WorkspaceRuleChooser workspaceRuleChooser = new WorkspaceRuleChooser();
return new BazelExtractor(executableRunner, externalIdFactory, workspaceRuleChooser);
final BazelDependencyParser bazelDependencyParser = new BazelDependencyParser(externalIdFactory);
return new BazelExtractor(executableRunner, bazelDependencyParser, workspaceRuleChooser);
}

public FilePathGenerator filePathGenerator() {
Expand Down

0 comments on commit 760fdba

Please sign in to comment.