This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 56d5ec60e feat(sonarqube): add file metrics convertor (#4360)
56d5ec60e is described below

commit 56d5ec60eb20d168f36f52de1ebc2e42b7ecb5b1
Author: Warren Chen <[email protected]>
AuthorDate: Wed Feb 8 17:55:59 2023 +0800

    feat(sonarqube): add file metrics convertor (#4360)
---
 .../securitytesting/st_file_metrics.go}            | 16 ++--
 .../domainlayer/securitytesting/st_issues.go       |  4 +-
 .../domainlayer/securitytesting/st_projects.go     |  2 +-
 .../20230208_add_security_testing.go               |  3 +-
 .../migrationscripts/archived/st_file_metrics.go}  | 18 ++---
 .../models/migrationscripts/archived/st_issues.go  |  6 +-
 .../migrationscripts/archived/st_projects.go       |  2 +-
 backend/plugins/sonarqube/impl/impl.go             |  1 +
 .../migrationscripts/20230111_add_init_tables.go   |  2 +-
 .../archived/sonarqube_file_metrics.go             |  1 +
 .../migrationscripts/archived/sonarqube_hotspot.go |  2 +-
 .../sonarqube/models/sonarqube_file_metrics.go     |  1 +
 .../sonarqube/tasks/filemetrics_convertor.go       | 93 ++++++++++++++++++++++
 .../sonarqube/tasks/filemetrics_extractor.go       |  1 +
 .../plugins/sonarqube/tasks/hotspots_convertor.go  |  7 +-
 .../plugins/sonarqube/tasks/issues_convertor.go    |  7 +-
 .../plugins/sonarqube/tasks/projects_convertor.go  |  4 +-
 17 files changed, 133 insertions(+), 37 deletions(-)

diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go 
b/backend/core/models/domainlayer/securitytesting/st_file_metrics.go
similarity index 84%
copy from backend/plugins/sonarqube/models/sonarqube_file_metrics.go
copy to backend/core/models/domainlayer/securitytesting/st_file_metrics.go
index d32b1fcc5..b51ea665e 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/core/models/domainlayer/securitytesting/st_file_metrics.go
@@ -15,15 +15,16 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package models
+package securitytesting
 
 import (
-       "github.com/apache/incubator-devlake/core/models/common"
+       "github.com/apache/incubator-devlake/core/models/domainlayer"
 )
 
-type SonarqubeFileMetrics struct {
-       ConnectionId             uint64  `gorm:"primaryKey"`
-       ComponentKey             string  `json:"component_key" 
gorm:"primaryKey"`
+type StFileMetrics struct {
+       domainlayer.DomainEntity
+       ComponentKey             string
+       Project                  string  `gorm:"index;type:varchar(255)"` 
//domain project key
        FileName                 string  `json:"file_name"`
        FilePath                 string  `json:"file_path"`
        FileLanguage             string  `json:"file_language"`
@@ -43,9 +44,8 @@ type SonarqubeFileMetrics struct {
        LinesToCover             int     `json:"lines_to_cover"`
        DuplicatedLinesDensity   float64 `json:"duplicated_lines_density"`
        DuplicatedBlocks         int     `json:"duplicated_blocks"`
-       common.NoPKModel
 }
 
-func (SonarqubeFileMetrics) TableName() string {
-       return "_tool_sonarqube_file_metrics"
+func (StFileMetrics) TableName() string {
+       return "st_file_metrics"
 }
diff --git a/backend/core/models/domainlayer/securitytesting/st_issues.go 
b/backend/core/models/domainlayer/securitytesting/st_issues.go
index 1d99451c4..e45ebe9d9 100644
--- a/backend/core/models/domainlayer/securitytesting/st_issues.go
+++ b/backend/core/models/domainlayer/securitytesting/st_issues.go
@@ -25,11 +25,11 @@ import (
 type StIssue struct {
        domainlayer.DomainEntity
        BatchId           string           `json:"batchId" 
gorm:"type:varchar(100)"` // from collection time
-       Key               string           `json:"key" gorm:"primaryKey"`
+       Project           string           `gorm:"index;type:varchar(255)"`     
     //domain project key
+       Key               string           `json:"key"`
        Rule              string           `json:"rule" 
gorm:"type:varchar(255)"`
        Severity          string           `json:"severity" 
gorm:"type:varchar(255)"`
        Component         string           `json:"component" 
gorm:"type:varchar(255)"`
-       Project           string           `json:"project" 
gorm:"type:varchar(255)"`
        Line              int              `json:"line"`
        Status            string           `json:"status" 
gorm:"type:varchar(255)"`
        Message           string           `json:"message"`
diff --git a/backend/core/models/domainlayer/securitytesting/st_projects.go 
b/backend/core/models/domainlayer/securitytesting/st_projects.go
index dc98555aa..eec3cb395 100644
--- a/backend/core/models/domainlayer/securitytesting/st_projects.go
+++ b/backend/core/models/domainlayer/securitytesting/st_projects.go
@@ -27,7 +27,7 @@ var _ plugin.Scope = (*StProject)(nil)
 
 type StProject struct {
        domainlayer.DomainEntity
-       Key              string           `json:"key" 
gorm:"type:varchar(64);primaryKey"`
+       Key              string           `json:"key" gorm:"type:varchar(64)"`
        Name             string           `json:"name" gorm:"type:varchar(255)"`
        Qualifier        string           `json:"qualifier" 
gorm:"type:varchar(255)"`
        Visibility       string           `json:"visibility" 
gorm:"type:varchar(64)"`
diff --git 
a/backend/core/models/migrationscripts/20230208_add_security_testing.go 
b/backend/core/models/migrationscripts/20230208_add_security_testing.go
index eb862fde0..481151de9 100644
--- a/backend/core/models/migrationscripts/20230208_add_security_testing.go
+++ b/backend/core/models/migrationscripts/20230208_add_security_testing.go
@@ -31,11 +31,12 @@ func (u *addSecurityTesting) Up(basicRes context.BasicRes) 
errors.Error {
                basicRes,
                &archived.StProject{},
                &archived.StIssue{},
+               &archived.StFileMetrics{},
        )
 }
 
 func (*addSecurityTesting) Version() uint64 {
-       return 20230208000002
+       return 20230208000008
 }
 
 func (*addSecurityTesting) Name() string {
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go 
b/backend/core/models/migrationscripts/archived/st_file_metrics.go
similarity index 83%
copy from backend/plugins/sonarqube/models/sonarqube_file_metrics.go
copy to backend/core/models/migrationscripts/archived/st_file_metrics.go
index d32b1fcc5..b93b51f02 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/core/models/migrationscripts/archived/st_file_metrics.go
@@ -15,15 +15,12 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package models
+package archived
 
-import (
-       "github.com/apache/incubator-devlake/core/models/common"
-)
-
-type SonarqubeFileMetrics struct {
-       ConnectionId             uint64  `gorm:"primaryKey"`
-       ComponentKey             string  `json:"component_key" 
gorm:"primaryKey"`
+type StFileMetrics struct {
+       DomainEntity
+       ComponentKey             string  `json:"component_key"`
+       Project                  string  `gorm:"index;type:varchar(255)"` 
//domain project key
        FileName                 string  `json:"file_name"`
        FilePath                 string  `json:"file_path"`
        FileLanguage             string  `json:"file_language"`
@@ -43,9 +40,8 @@ type SonarqubeFileMetrics struct {
        LinesToCover             int     `json:"lines_to_cover"`
        DuplicatedLinesDensity   float64 `json:"duplicated_lines_density"`
        DuplicatedBlocks         int     `json:"duplicated_blocks"`
-       common.NoPKModel
 }
 
-func (SonarqubeFileMetrics) TableName() string {
-       return "_tool_sonarqube_file_metrics"
+func (StFileMetrics) TableName() string {
+       return "st_file_metrics"
 }
diff --git a/backend/core/models/migrationscripts/archived/st_issues.go 
b/backend/core/models/migrationscripts/archived/st_issues.go
index 1f163d571..1460831be 100644
--- a/backend/core/models/migrationscripts/archived/st_issues.go
+++ b/backend/core/models/migrationscripts/archived/st_issues.go
@@ -23,12 +23,12 @@ import (
 
 type StIssue struct {
        DomainEntity
-       BatchId           string           `json:"batchId" 
gorm:"type:varchar(100)"` // from collection time
-       Key               string           `json:"key" gorm:"primaryKey"`
+       BatchId           string `json:"batchId" gorm:"type:varchar(100)"` // 
from collection time
+       Key               string
+       Project           string           `gorm:"index;type:varchar(255)"` 
//domain project key
        Rule              string           `json:"rule" 
gorm:"type:varchar(255)"`
        Severity          string           `json:"severity" 
gorm:"type:varchar(255)"`
        Component         string           `json:"component" 
gorm:"type:varchar(255)"`
-       Project           string           `json:"project" 
gorm:"type:varchar(255)"`
        Line              int              `json:"line"`
        Status            string           `json:"status" 
gorm:"type:varchar(255)"`
        Message           string           `json:"message"`
diff --git a/backend/core/models/migrationscripts/archived/st_projects.go 
b/backend/core/models/migrationscripts/archived/st_projects.go
index b9716b491..6646a5c38 100644
--- a/backend/core/models/migrationscripts/archived/st_projects.go
+++ b/backend/core/models/migrationscripts/archived/st_projects.go
@@ -23,7 +23,7 @@ import (
 
 type StProject struct {
        DomainEntity
-       Key              string           `json:"key" 
gorm:"type:varchar(64);primaryKey"`
+       Key              string           `json:"key" gorm:"type:varchar(64)"`
        Name             string           `json:"name" gorm:"type:varchar(255)"`
        Qualifier        string           `json:"qualifier" 
gorm:"type:varchar(255)"`
        Visibility       string           `json:"visibility" 
gorm:"type:varchar(64)"`
diff --git a/backend/plugins/sonarqube/impl/impl.go 
b/backend/plugins/sonarqube/impl/impl.go
index ce9d168b0..63d60f6ff 100644
--- a/backend/plugins/sonarqube/impl/impl.go
+++ b/backend/plugins/sonarqube/impl/impl.go
@@ -66,6 +66,7 @@ func (p Sonarqube) SubTaskMetas() []plugin.SubTaskMeta {
                tasks.ConvertProjectsMeta,
                tasks.ConvertIssuesMeta,
                tasks.ConvertHotspotsMeta,
+               tasks.ConvertFileMetricsMeta,
        }
 }
 
diff --git 
a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go 
b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
index 3bbc09ad6..4dd8e6238 100644
--- 
a/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
+++ 
b/backend/plugins/sonarqube/models/migrationscripts/20230111_add_init_tables.go
@@ -40,7 +40,7 @@ func (*addInitTables) Up(basicRes context.BasicRes) 
errors.Error {
 }
 
 func (*addInitTables) Version() uint64 {
-       return 20230207220016
+       return 20230207220021
 }
 
 func (*addInitTables) Name() string {
diff --git 
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
 
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
index ef9209018..6f17c2682 100644
--- 
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
+++ 
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_file_metrics.go
@@ -24,6 +24,7 @@ import (
 type SonarqubeFileMetrics struct {
        ConnectionId             uint64  `gorm:"primaryKey"`
        ComponentKey             string  `json:"component_key" 
gorm:"primaryKey"`
+       Project                  string  `json:"project" gorm:"index"`
        FileName                 string  `json:"file_name"`
        FilePath                 string  `json:"file_path"`
        FileLanguage             string  `json:"file_language"`
diff --git 
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
 
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
index a94aeac94..f8259b654 100644
--- 
a/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
+++ 
b/backend/plugins/sonarqube/models/migrationscripts/archived/sonarqube_hotspot.go
@@ -25,9 +25,9 @@ import (
 type SonarqubeHotspot struct {
        ConnectionId             uint64           `gorm:"primaryKey"`
        Key                      string           `json:"key" gorm:"primaryKey"`
+       Project                  string           `json:"project" gorm:"index"`
        BatchId                  string           `json:"batchId" 
gorm:"type:varchar(100)"` // from collection time
        Component                string           `json:"component" 
gorm:"index"`
-       Project                  string           `json:"project" gorm:"index"`
        SecurityCategory         string           `json:"securityCategory"`
        VulnerabilityProbability string           
`json:"vulnerabilityProbability"`
        Status                   string           `json:"status"`
diff --git a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go 
b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
index d32b1fcc5..b0718e6e5 100644
--- a/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
+++ b/backend/plugins/sonarqube/models/sonarqube_file_metrics.go
@@ -24,6 +24,7 @@ import (
 type SonarqubeFileMetrics struct {
        ConnectionId             uint64  `gorm:"primaryKey"`
        ComponentKey             string  `json:"component_key" 
gorm:"primaryKey"`
+       Project                  string  `json:"project" gorm:"index"`
        FileName                 string  `json:"file_name"`
        FilePath                 string  `json:"file_path"`
        FileLanguage             string  `json:"file_language"`
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_convertor.go 
b/backend/plugins/sonarqube/tasks/filemetrics_convertor.go
new file mode 100644
index 000000000..bd0a24af9
--- /dev/null
+++ b/backend/plugins/sonarqube/tasks/filemetrics_convertor.go
@@ -0,0 +1,93 @@
+/*
+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 tasks
+
+import (
+       "github.com/apache/incubator-devlake/core/dal"
+       "github.com/apache/incubator-devlake/core/errors"
+       "github.com/apache/incubator-devlake/core/models/domainlayer"
+       "github.com/apache/incubator-devlake/core/models/domainlayer/didgen"
+       
"github.com/apache/incubator-devlake/core/models/domainlayer/securitytesting"
+       "github.com/apache/incubator-devlake/core/plugin"
+       "github.com/apache/incubator-devlake/helpers/pluginhelper/api"
+       sonarqubeModels 
"github.com/apache/incubator-devlake/plugins/sonarqube/models"
+       "reflect"
+)
+
+var ConvertFileMetricsMeta = plugin.SubTaskMeta{
+       Name:             "convertFileMetrics",
+       EntryPoint:       ConvertFileMetrics,
+       EnabledByDefault: true,
+       Description:      "Convert tool layer table sonarqube_file_metrics into 
 domain layer table st_file_metrics",
+       DomainTypes:      []string{plugin.DOMAIN_TYPE_SECURITY_TESTING},
+}
+
+func ConvertFileMetrics(taskCtx plugin.SubTaskContext) errors.Error {
+       db := taskCtx.GetDal()
+       rawDataSubTaskArgs, data := CreateRawDataSubTaskArgs(taskCtx, 
RAW_PROJECTS_TABLE)
+       cursor, err := 
db.Cursor(dal.From(sonarqubeModels.SonarqubeFileMetrics{}),
+               dal.Where("connection_id = ? and project = ?", 
data.Options.ConnectionId, data.Options.ProjectKey))
+       if err != nil {
+               return err
+       }
+       defer cursor.Close()
+
+       issueIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeFileMetrics{})
+       projectIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeProject{})
+       converter, err := api.NewDataConverter(api.DataConverterArgs{
+               InputRowType:       
reflect.TypeOf(sonarqubeModels.SonarqubeFileMetrics{}),
+               Input:              cursor,
+               RawDataSubTaskArgs: *rawDataSubTaskArgs,
+               Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
+                       sonarqubeFileMetric := 
inputRow.(*sonarqubeModels.SonarqubeFileMetrics)
+                       domainFileMetric := &securitytesting.StFileMetrics{
+                               DomainEntity: domainlayer.DomainEntity{Id: 
issueIdGen.Generate(data.Options.ConnectionId, 
sonarqubeFileMetric.ComponentKey)},
+                               ComponentKey: sonarqubeFileMetric.ComponentKey,
+                               FileName:     sonarqubeFileMetric.FileName,
+                               FilePath:     sonarqubeFileMetric.FilePath,
+                               FileLanguage: sonarqubeFileMetric.FileLanguage,
+                               Project:      
projectIdGen.Generate(data.Options.ConnectionId, sonarqubeFileMetric.Project),
+                               //BatchID:                  
sonarqubeFileMetric.BatchID,
+                               CodeSmells:               
sonarqubeFileMetric.CodeSmells,
+                               SqaleIndex:               
sonarqubeFileMetric.SqaleIndex,
+                               SqaleRating:              
sonarqubeFileMetric.SqaleRating,
+                               Bugs:                     
sonarqubeFileMetric.Bugs,
+                               ReliabilityRating:        
sonarqubeFileMetric.ReliabilityRating,
+                               Vulnerabilities:          
sonarqubeFileMetric.Vulnerabilities,
+                               SecurityRating:           
sonarqubeFileMetric.SecurityRating,
+                               SecurityHotspots:         
sonarqubeFileMetric.SecurityHotspots,
+                               SecurityHotspotsReviewed: 
sonarqubeFileMetric.SecurityHotspotsReviewed,
+                               SecurityReviewRating:     
sonarqubeFileMetric.SecurityReviewRating,
+                               Ncloc:                    
sonarqubeFileMetric.Ncloc,
+                               Coverage:                 
sonarqubeFileMetric.Coverage,
+                               LinesToCover:             
sonarqubeFileMetric.LinesToCover,
+                               DuplicatedLinesDensity:   
sonarqubeFileMetric.DuplicatedLinesDensity,
+                               DuplicatedBlocks:         
sonarqubeFileMetric.DuplicatedBlocks,
+                       }
+                       return []interface{}{
+                               domainFileMetric,
+                       }, nil
+               },
+       })
+
+       if err != nil {
+               return err
+       }
+
+       return converter.Execute()
+}
diff --git a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go 
b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
index 7f6744cc4..3ff73f8ee 100644
--- a/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
+++ b/backend/plugins/sonarqube/tasks/filemetrics_extractor.go
@@ -46,6 +46,7 @@ func ExtractFilemetrics(taskCtx plugin.SubTaskContext) 
errors.Error {
                                FileName:     body.Name,
                                FilePath:     body.Path,
                                FileLanguage: body.Language,
+                               Project:      data.Options.ProjectKey,
                                //BatchID:                  "",
                        }
                        alphabetMap := map[string]string{
diff --git a/backend/plugins/sonarqube/tasks/hotspots_convertor.go 
b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
index 7367bffee..02dbd1d09 100644
--- a/backend/plugins/sonarqube/tasks/hotspots_convertor.go
+++ b/backend/plugins/sonarqube/tasks/hotspots_convertor.go
@@ -47,7 +47,8 @@ func ConvertHotspots(taskCtx plugin.SubTaskContext) 
errors.Error {
        }
        defer cursor.Close()
 
-       accountIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeHotspot{})
+       issueIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeHotspot{})
+       projectIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeProject{})
        converter, err := api.NewDataConverter(api.DataConverterArgs{
                InputRowType:       
reflect.TypeOf(sonarqubeModels.SonarqubeHotspot{}),
                Input:              cursor,
@@ -55,11 +56,11 @@ func ConvertHotspots(taskCtx plugin.SubTaskContext) 
errors.Error {
                Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
                        sonarqubeHotspot := 
inputRow.(*sonarqubeModels.SonarqubeHotspot)
                        domainHotspot := &securitytesting.StIssue{
-                               DomainEntity:      domainlayer.DomainEntity{Id: 
accountIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Key)},
+                               DomainEntity:      domainlayer.DomainEntity{Id: 
issueIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Key)},
                                BatchId:           sonarqubeHotspot.BatchId,
                                Key:               sonarqubeHotspot.Key,
                                Component:         sonarqubeHotspot.Component,
-                               Project:           sonarqubeHotspot.Project,
+                               Project:           
projectIdGen.Generate(data.Options.ConnectionId, sonarqubeHotspot.Project),
                                Line:              sonarqubeHotspot.Line,
                                Status:            sonarqubeHotspot.Status,
                                Message:           sonarqubeHotspot.Message,
diff --git a/backend/plugins/sonarqube/tasks/issues_convertor.go 
b/backend/plugins/sonarqube/tasks/issues_convertor.go
index c942038cc..1df8e094b 100644
--- a/backend/plugins/sonarqube/tasks/issues_convertor.go
+++ b/backend/plugins/sonarqube/tasks/issues_convertor.go
@@ -47,7 +47,8 @@ func ConvertIssues(taskCtx plugin.SubTaskContext) 
errors.Error {
        }
        defer cursor.Close()
 
-       accountIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeIssue{})
+       issueIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeIssue{})
+       projectIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeProject{})
        converter, err := api.NewDataConverter(api.DataConverterArgs{
                InputRowType:       
reflect.TypeOf(sonarqubeModels.SonarqubeIssue{}),
                Input:              cursor,
@@ -55,13 +56,13 @@ func ConvertIssues(taskCtx plugin.SubTaskContext) 
errors.Error {
                Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
                        sonarqubeIssue := 
inputRow.(*sonarqubeModels.SonarqubeIssue)
                        domainIssue := &securitytesting.StIssue{
-                               DomainEntity:      domainlayer.DomainEntity{Id: 
accountIdGen.Generate(data.Options.ConnectionId, sonarqubeIssue.Key)},
+                               DomainEntity:      domainlayer.DomainEntity{Id: 
issueIdGen.Generate(data.Options.ConnectionId, sonarqubeIssue.Key)},
                                BatchId:           sonarqubeIssue.BatchId,
                                Key:               sonarqubeIssue.Key,
                                Rule:              sonarqubeIssue.Rule,
                                Severity:          sonarqubeIssue.Severity,
                                Component:         sonarqubeIssue.Component,
-                               Project:           sonarqubeIssue.Project,
+                               Project:           
projectIdGen.Generate(data.Options.ConnectionId, sonarqubeIssue.Project),
                                Line:              sonarqubeIssue.Line,
                                Status:            sonarqubeIssue.Status,
                                Message:           sonarqubeIssue.Message,
diff --git a/backend/plugins/sonarqube/tasks/projects_convertor.go 
b/backend/plugins/sonarqube/tasks/projects_convertor.go
index aabe498cb..9cad73f3f 100644
--- a/backend/plugins/sonarqube/tasks/projects_convertor.go
+++ b/backend/plugins/sonarqube/tasks/projects_convertor.go
@@ -47,7 +47,7 @@ func ConvertProjects(taskCtx plugin.SubTaskContext) 
errors.Error {
        }
        defer cursor.Close()
 
-       accountIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeProject{})
+       projectIdGen := 
didgen.NewDomainIdGenerator(&sonarqubeModels.SonarqubeProject{})
        converter, err := api.NewDataConverter(api.DataConverterArgs{
                InputRowType:       
reflect.TypeOf(sonarqubeModels.SonarqubeProject{}),
                Input:              cursor,
@@ -55,7 +55,7 @@ func ConvertProjects(taskCtx plugin.SubTaskContext) 
errors.Error {
                Convert: func(inputRow interface{}) ([]interface{}, 
errors.Error) {
                        sonarqubeProject := 
inputRow.(*sonarqubeModels.SonarqubeProject)
                        domainProject := &securitytesting.StProject{
-                               DomainEntity:     domainlayer.DomainEntity{Id: 
accountIdGen.Generate(data.Options.ConnectionId, sonarqubeProject.Key)},
+                               DomainEntity:     domainlayer.DomainEntity{Id: 
projectIdGen.Generate(data.Options.ConnectionId, sonarqubeProject.Key)},
                                Key:              sonarqubeProject.Key,
                                Name:             sonarqubeProject.Name,
                                Qualifier:        sonarqubeProject.Qualifier,

Reply via email to