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

zhangliang2022 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 8ca740a1 feat: jira blueprint normal mode (#2364)
8ca740a1 is described below

commit 8ca740a125a8fb9d3279f72173af3cd5b4efd002
Author: mindlesscloud <[email protected]>
AuthorDate: Tue Jun 28 09:42:49 2022 +0800

    feat: jira blueprint normal mode (#2364)
    
    * feat: jira blueprint normal mode
    
    * refactor: remove redundant codes
---
 plugins/jira/api/blueprint.go                      | 64 ++++++++++++++++++++++
 plugins/jira/impl/impl.go                          |  5 ++
 plugins/jira/models/migrationscripts/register.go   |  1 +
 .../migrationscripts/updateSchemas20220624.go      | 57 +++++++++++++++++++
 plugins/jira/tasks/board_collector.go              |  1 +
 plugins/jira/tasks/board_convertor.go              |  3 +-
 plugins/jira/tasks/board_extractor.go              |  1 +
 plugins/jira/tasks/changelog_collector.go          |  1 +
 plugins/jira/tasks/changelog_convertor.go          |  1 +
 plugins/jira/tasks/changelog_extractor.go          |  1 +
 plugins/jira/tasks/issue_collector.go              |  1 +
 plugins/jira/tasks/issue_commit_convertor.go       |  1 +
 plugins/jira/tasks/issue_convertor.go              |  1 +
 plugins/jira/tasks/issue_extractor.go              |  1 +
 plugins/jira/tasks/issue_repo_commit_convertor.go  |  1 +
 plugins/jira/tasks/project_collector.go            |  1 +
 plugins/jira/tasks/project_extractor.go            |  1 +
 plugins/jira/tasks/remotelink_collector.go         |  1 +
 plugins/jira/tasks/remotelink_extractor.go         |  1 +
 plugins/jira/tasks/sprint_collector.go             |  1 +
 plugins/jira/tasks/sprint_convertor.go             |  1 +
 plugins/jira/tasks/sprint_extractor.go             |  1 +
 plugins/jira/tasks/sprint_issues_convertor.go      |  1 +
 plugins/jira/tasks/status_collector.go             |  1 +
 plugins/jira/tasks/status_extractor.go             |  1 +
 plugins/jira/tasks/task_data.go                    | 22 +++++++-
 plugins/jira/tasks/user_collector.go               |  1 +
 plugins/jira/tasks/user_convertor.go               |  1 +
 plugins/jira/tasks/user_extractor.go               |  1 +
 plugins/jira/tasks/worklog_collector.go            |  1 +
 plugins/jira/tasks/worklog_convertor.go            |  1 +
 plugins/jira/tasks/worklog_extractor.go            |  1 +
 32 files changed, 174 insertions(+), 4 deletions(-)

diff --git a/plugins/jira/api/blueprint.go b/plugins/jira/api/blueprint.go
new file mode 100644
index 00000000..cbf5043b
--- /dev/null
+++ b/plugins/jira/api/blueprint.go
@@ -0,0 +1,64 @@
+/*
+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 api
+
+import (
+       "encoding/json"
+
+       "github.com/apache/incubator-devlake/plugins/core"
+       "github.com/apache/incubator-devlake/plugins/helper"
+       "github.com/apache/incubator-devlake/plugins/jira/tasks"
+)
+
+func MakePipelinePlan(subtaskMetas []core.SubTaskMeta, connectionId uint64, 
scope []*core.BlueprintScopeV100) (core.PipelinePlan, error) {
+       var err error
+       plan := make(core.PipelinePlan, len(scope))
+       for i, scopeElem := range scope {
+               var transformationRules tasks.TransformationRules
+               if len(scopeElem.Transformation) > 0 {
+                       err = json.Unmarshal(scopeElem.Transformation, 
&transformationRules)
+                       if err != nil {
+                               return nil, err
+                       }
+               }
+               taskOptions := make(map[string]interface{})
+               err = json.Unmarshal(scopeElem.Options, &taskOptions)
+               if err != nil {
+                       return nil, err
+               }
+               taskOptions["connectionId"] = connectionId
+               taskOptions["transformationRules"] = transformationRules
+               _, err := tasks.DecodeAndValidateTaskOptions(taskOptions)
+               if err != nil {
+                       return nil, err
+               }
+               // subtasks
+               subtasks, err := helper.MakePipelinePlanSubtasks(subtaskMetas, 
scopeElem.Entities)
+               if err != nil {
+                       return nil, err
+               }
+               plan[i] = core.PipelineStage{
+                       {
+                               Plugin:   "jira",
+                               Subtasks: subtasks,
+                               Options:  taskOptions,
+                       },
+               }
+       }
+       return plan, nil
+}
diff --git a/plugins/jira/impl/impl.go b/plugins/jira/impl/impl.go
index ef434189..455d8ac7 100644
--- a/plugins/jira/impl/impl.go
+++ b/plugins/jira/impl/impl.go
@@ -39,6 +39,7 @@ var _ core.PluginInit = (*Jira)(nil)
 var _ core.PluginTask = (*Jira)(nil)
 var _ core.PluginApi = (*Jira)(nil)
 var _ core.Migratable = (*Jira)(nil)
+var _ core.PluginBlueprintV100 = (*Jira)(nil)
 
 type Jira struct{}
 
@@ -150,6 +151,10 @@ func (plugin Jira) PrepareTaskData(taskCtx 
core.TaskContext, options map[string]
        return taskData, nil
 }
 
+func (plugin Jira) MakePipelinePlan(connectionId uint64, scope 
[]*core.BlueprintScopeV100) (core.PipelinePlan, error) {
+       return api.MakePipelinePlan(plugin.SubTaskMetas(), connectionId, scope)
+}
+
 func (plugin Jira) RootPkgPath() string {
        return "github.com/apache/incubator-devlake/plugins/jira"
 }
diff --git a/plugins/jira/models/migrationscripts/register.go 
b/plugins/jira/models/migrationscripts/register.go
index e3fcd0b4..6bfd0402 100644
--- a/plugins/jira/models/migrationscripts/register.go
+++ b/plugins/jira/models/migrationscripts/register.go
@@ -36,5 +36,6 @@ func All() []migration.Script {
                new(UpdateSchemas20220615),
                new(UpdateSchemas20220616),
                new(UpdateSchemas20220620),
+               new(UpdateSchemas20220624),
        }
 }
diff --git a/plugins/jira/models/migrationscripts/updateSchemas20220624.go 
b/plugins/jira/models/migrationscripts/updateSchemas20220624.go
new file mode 100644
index 00000000..5dc389fa
--- /dev/null
+++ b/plugins/jira/models/migrationscripts/updateSchemas20220624.go
@@ -0,0 +1,57 @@
+/*
+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 migrationscripts
+
+import (
+       "context"
+
+       "gorm.io/gorm"
+)
+
+type JiraConnection20220624 struct {
+       EpicKeyField               string `gorm:"type:varchar(50);" 
json:"epicKeyField"`
+       StoryPointField            string `gorm:"type:varchar(50);" 
json:"storyPointField"`
+       RemotelinkCommitShaPattern string 
`gorm:"type:varchar(255);comment='golang regexp, the first group will be 
recognized as commit sha, ref https://github.com/google/re2/wiki/Syntax'" 
json:"remotelinkCommitShaPattern"`
+}
+
+func (JiraConnection20220624) TableName() string {
+       return "_tool_jira_connections"
+}
+
+type UpdateSchemas20220624 struct {
+}
+
+func (u *UpdateSchemas20220624) Up(ctx context.Context, db *gorm.DB) error {
+       err := db.Migrator().DropColumn(&JiraConnection20220624{}, 
"epic_key_field")
+       if err != nil {
+               return err
+       }
+       err = db.Migrator().DropColumn(&JiraConnection20220624{}, 
"story_point_field")
+       if err != nil {
+               return err
+       }
+       return db.Migrator().DropColumn(&JiraConnection20220624{}, 
"remotelink_commit_sha_pattern")
+}
+
+func (*UpdateSchemas20220624) Version() uint64 {
+       return 20220624102636
+}
+
+func (*UpdateSchemas20220624) Name() string {
+       return "remove epic_key_field, story_point_field, 
remotelink_commit_sha_pattern"
+}
diff --git a/plugins/jira/tasks/board_collector.go 
b/plugins/jira/tasks/board_collector.go
index 2642a43f..f5b438bb 100644
--- a/plugins/jira/tasks/board_collector.go
+++ b/plugins/jira/tasks/board_collector.go
@@ -35,6 +35,7 @@ var CollectBoardMeta = core.SubTaskMeta{
        EntryPoint:       CollectBoard,
        EnabledByDefault: true,
        Description:      "collect Jira board",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectBoard(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/board_convertor.go 
b/plugins/jira/tasks/board_convertor.go
index 1fccfd09..4ef0a978 100644
--- a/plugins/jira/tasks/board_convertor.go
+++ b/plugins/jira/tasks/board_convertor.go
@@ -18,13 +18,13 @@ limitations under the License.
 package tasks
 
 import (
-       "github.com/apache/incubator-devlake/plugins/core/dal"
        "reflect"
 
        "github.com/apache/incubator-devlake/models/domainlayer"
        "github.com/apache/incubator-devlake/models/domainlayer/didgen"
        "github.com/apache/incubator-devlake/models/domainlayer/ticket"
        "github.com/apache/incubator-devlake/plugins/core"
+       "github.com/apache/incubator-devlake/plugins/core/dal"
        "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/plugins/jira/models"
 )
@@ -34,6 +34,7 @@ var ConvertBoardMeta = core.SubTaskMeta{
        EntryPoint:       ConvertBoard,
        EnabledByDefault: true,
        Description:      "convert Jira board",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertBoard(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/board_extractor.go 
b/plugins/jira/tasks/board_extractor.go
index cf00fec2..e0b370df 100644
--- a/plugins/jira/tasks/board_extractor.go
+++ b/plugins/jira/tasks/board_extractor.go
@@ -31,6 +31,7 @@ var ExtractBoardMeta = core.SubTaskMeta{Name: "extractBoard",
        EntryPoint:       ExtractBoard,
        EnabledByDefault: true,
        Description:      "extract Jira board",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractBoard(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/changelog_collector.go 
b/plugins/jira/tasks/changelog_collector.go
index 09a9175a..bcfb38db 100644
--- a/plugins/jira/tasks/changelog_collector.go
+++ b/plugins/jira/tasks/changelog_collector.go
@@ -40,6 +40,7 @@ var CollectChangelogsMeta = core.SubTaskMeta{
        EntryPoint:       CollectChangelogs,
        EnabledByDefault: true,
        Description:      "collect Jira change logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectChangelogs(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/changelog_convertor.go 
b/plugins/jira/tasks/changelog_convertor.go
index 4b6fae3b..bbcbf8bb 100644
--- a/plugins/jira/tasks/changelog_convertor.go
+++ b/plugins/jira/tasks/changelog_convertor.go
@@ -37,6 +37,7 @@ var ConvertChangelogsMeta = core.SubTaskMeta{
        EntryPoint:       ConvertChangelogs,
        EnabledByDefault: true,
        Description:      "convert Jira change logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 type ChangelogItemResult struct {
diff --git a/plugins/jira/tasks/changelog_extractor.go 
b/plugins/jira/tasks/changelog_extractor.go
index f15c9be3..cadd2815 100644
--- a/plugins/jira/tasks/changelog_extractor.go
+++ b/plugins/jira/tasks/changelog_extractor.go
@@ -33,6 +33,7 @@ var ExtractChangelogsMeta = core.SubTaskMeta{
        EntryPoint:       ExtractChangelogs,
        EnabledByDefault: true,
        Description:      "extract Jira change logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractChangelogs(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/issue_collector.go 
b/plugins/jira/tasks/issue_collector.go
index 5b64d138..f252f940 100644
--- a/plugins/jira/tasks/issue_collector.go
+++ b/plugins/jira/tasks/issue_collector.go
@@ -46,6 +46,7 @@ var CollectIssuesMeta = core.SubTaskMeta{
        EntryPoint:       CollectIssues,
        EnabledByDefault: true,
        Description:      "collect Jira issues",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectIssues(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/issue_commit_convertor.go 
b/plugins/jira/tasks/issue_commit_convertor.go
index c228859b..a1174945 100644
--- a/plugins/jira/tasks/issue_commit_convertor.go
+++ b/plugins/jira/tasks/issue_commit_convertor.go
@@ -33,6 +33,7 @@ var ConvertIssueCommitsMeta = core.SubTaskMeta{
        EntryPoint:       ConvertIssueCommits,
        EnabledByDefault: true,
        Description:      "convert Jira issue commits",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertIssueCommits(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/issue_convertor.go 
b/plugins/jira/tasks/issue_convertor.go
index 22a55dcf..0c2a4876 100644
--- a/plugins/jira/tasks/issue_convertor.go
+++ b/plugins/jira/tasks/issue_convertor.go
@@ -36,6 +36,7 @@ var ConvertIssuesMeta = core.SubTaskMeta{
        EntryPoint:       ConvertIssues,
        EnabledByDefault: true,
        Description:      "convert Jira issues",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertIssues(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/issue_extractor.go 
b/plugins/jira/tasks/issue_extractor.go
index 870fb0a1..9def3d7d 100644
--- a/plugins/jira/tasks/issue_extractor.go
+++ b/plugins/jira/tasks/issue_extractor.go
@@ -36,6 +36,7 @@ var ExtractIssuesMeta = core.SubTaskMeta{
        EntryPoint:       ExtractIssues,
        EnabledByDefault: true,
        Description:      "extract Jira issues",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractIssues(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/issue_repo_commit_convertor.go 
b/plugins/jira/tasks/issue_repo_commit_convertor.go
index 7de02746..c80d76ad 100644
--- a/plugins/jira/tasks/issue_repo_commit_convertor.go
+++ b/plugins/jira/tasks/issue_repo_commit_convertor.go
@@ -34,6 +34,7 @@ var ConvertIssueRepoCommitsMeta = core.SubTaskMeta{
        EntryPoint:       ConvertIssueRepoCommits,
        EnabledByDefault: false,
        Description:      "convert Jira issue repo commits",
+       DomainTypes:      []string{core.DOMAIN_TYPE_CROSS},
 }
 
 // ConvertIssueRepoCommits is to extract issue_repo_commits from 
jira_issue_commits, nothing difference with
diff --git a/plugins/jira/tasks/project_collector.go 
b/plugins/jira/tasks/project_collector.go
index 811acf90..94f33ffb 100644
--- a/plugins/jira/tasks/project_collector.go
+++ b/plugins/jira/tasks/project_collector.go
@@ -35,6 +35,7 @@ var CollectProjectsMeta = core.SubTaskMeta{
        EntryPoint:       CollectProjects,
        EnabledByDefault: true,
        Description:      "collect Jira projects",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectProjects(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/project_extractor.go 
b/plugins/jira/tasks/project_extractor.go
index e37468ca..fc5a0461 100644
--- a/plugins/jira/tasks/project_extractor.go
+++ b/plugins/jira/tasks/project_extractor.go
@@ -32,6 +32,7 @@ var ExtractProjectsMeta = core.SubTaskMeta{
        EntryPoint:       ExtractProjects,
        EnabledByDefault: true,
        Description:      "extract Jira projects",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractProjects(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/remotelink_collector.go 
b/plugins/jira/tasks/remotelink_collector.go
index 77a78f23..529a0949 100644
--- a/plugins/jira/tasks/remotelink_collector.go
+++ b/plugins/jira/tasks/remotelink_collector.go
@@ -37,6 +37,7 @@ var CollectRemotelinksMeta = core.SubTaskMeta{
        EntryPoint:       CollectRemotelinks,
        EnabledByDefault: true,
        Description:      "collect Jira remote links",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectRemotelinks(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/remotelink_extractor.go 
b/plugins/jira/tasks/remotelink_extractor.go
index 99ef2be5..d3027bd0 100644
--- a/plugins/jira/tasks/remotelink_extractor.go
+++ b/plugins/jira/tasks/remotelink_extractor.go
@@ -33,6 +33,7 @@ var ExtractRemotelinksMeta = core.SubTaskMeta{
        EntryPoint:       ExtractRemotelinks,
        EnabledByDefault: true,
        Description:      "extract Jira remote links",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractRemotelinks(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/sprint_collector.go 
b/plugins/jira/tasks/sprint_collector.go
index 6f10fb8b..14b366b5 100644
--- a/plugins/jira/tasks/sprint_collector.go
+++ b/plugins/jira/tasks/sprint_collector.go
@@ -36,6 +36,7 @@ var CollectSprintsMeta = core.SubTaskMeta{
        EntryPoint:       CollectSprints,
        EnabledByDefault: true,
        Description:      "collect Jira sprints",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectSprints(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/sprint_convertor.go 
b/plugins/jira/tasks/sprint_convertor.go
index 54ddb3a9..13fc73e8 100644
--- a/plugins/jira/tasks/sprint_convertor.go
+++ b/plugins/jira/tasks/sprint_convertor.go
@@ -35,6 +35,7 @@ var ConvertSprintsMeta = core.SubTaskMeta{
        EntryPoint:       ConvertSprints,
        EnabledByDefault: true,
        Description:      "convert Jira sprints",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertSprints(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/sprint_extractor.go 
b/plugins/jira/tasks/sprint_extractor.go
index bc9a588a..c994352c 100644
--- a/plugins/jira/tasks/sprint_extractor.go
+++ b/plugins/jira/tasks/sprint_extractor.go
@@ -33,6 +33,7 @@ var ExtractSprintsMeta = core.SubTaskMeta{
        EntryPoint:       ExtractSprints,
        EnabledByDefault: true,
        Description:      "extract Jira sprints",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractSprints(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/sprint_issues_convertor.go 
b/plugins/jira/tasks/sprint_issues_convertor.go
index c5401bfd..182ce133 100644
--- a/plugins/jira/tasks/sprint_issues_convertor.go
+++ b/plugins/jira/tasks/sprint_issues_convertor.go
@@ -33,6 +33,7 @@ var ConvertSprintIssuesMeta = core.SubTaskMeta{
        EntryPoint:       ConvertSprintIssues,
        EnabledByDefault: true,
        Description:      "convert Jira sprint_issues",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertSprintIssues(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/status_collector.go 
b/plugins/jira/tasks/status_collector.go
index da5bd952..300cca9d 100644
--- a/plugins/jira/tasks/status_collector.go
+++ b/plugins/jira/tasks/status_collector.go
@@ -32,6 +32,7 @@ var CollectStatusMeta = core.SubTaskMeta{
        EntryPoint:       CollectStatus,
        EnabledByDefault: true,
        Description:      "collect Jira status",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectStatus(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/status_extractor.go 
b/plugins/jira/tasks/status_extractor.go
index 73362814..56270a5b 100644
--- a/plugins/jira/tasks/status_extractor.go
+++ b/plugins/jira/tasks/status_extractor.go
@@ -31,6 +31,7 @@ var ExtractStatusMeta = core.SubTaskMeta{
        EntryPoint:       ExtractStatus,
        EnabledByDefault: true,
        Description:      "extract Jira status",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractStatus(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/task_data.go b/plugins/jira/tasks/task_data.go
index 084fc1a6..2fc28699 100644
--- a/plugins/jira/tasks/task_data.go
+++ b/plugins/jira/tasks/task_data.go
@@ -18,10 +18,12 @@ limitations under the License.
 package tasks
 
 import (
+       "fmt"
        "time"
 
        "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/plugins/jira/models"
+       "github.com/mitchellh/mapstructure"
 )
 
 type TransformationRules struct {
@@ -34,9 +36,8 @@ type TransformationRules struct {
 }
 
 type JiraOptions struct {
-       ConnectionId        uint64   `json:"connectionId"`
-       BoardId             uint64   `json:"boardId"`
-       Tasks               []string `json:"tasks,omitempty"`
+       ConnectionId        uint64 `json:"connectionId"`
+       BoardId             uint64 `json:"boardId"`
        Since               string
        TransformationRules TransformationRules `json:"transformationRules"`
 }
@@ -47,3 +48,18 @@ type JiraTaskData struct {
        Since          *time.Time
        JiraServerInfo models.JiraServerInfo
 }
+
+func DecodeAndValidateTaskOptions(options map[string]interface{}) 
(*JiraOptions, error) {
+       var op JiraOptions
+       err := mapstructure.Decode(options, &op)
+       if err != nil {
+               return nil, err
+       }
+       if op.ConnectionId == 0 {
+               return nil, fmt.Errorf("invalid connectionId:%d", 
op.ConnectionId)
+       }
+       if op.BoardId == 0 {
+               return nil, fmt.Errorf("invalid boardId:%d", op.BoardId)
+       }
+       return &op, nil
+}
diff --git a/plugins/jira/tasks/user_collector.go 
b/plugins/jira/tasks/user_collector.go
index 86bf3e60..fc5dfb65 100644
--- a/plugins/jira/tasks/user_collector.go
+++ b/plugins/jira/tasks/user_collector.go
@@ -36,6 +36,7 @@ var CollectUsersMeta = core.SubTaskMeta{
        EntryPoint:       CollectUsers,
        EnabledByDefault: true,
        Description:      "collect Jira users",
+       DomainTypes:      []string{core.DOMAIN_TYPE_CROSS},
 }
 
 func CollectUsers(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/user_convertor.go 
b/plugins/jira/tasks/user_convertor.go
index a163d20e..2d547466 100644
--- a/plugins/jira/tasks/user_convertor.go
+++ b/plugins/jira/tasks/user_convertor.go
@@ -33,6 +33,7 @@ var ConvertUsersMeta = core.SubTaskMeta{
        EntryPoint:       ConvertUsers,
        EnabledByDefault: true,
        Description:      "convert Jira users",
+       DomainTypes:      []string{core.DOMAIN_TYPE_CROSS},
 }
 
 func ConvertUsers(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/user_extractor.go 
b/plugins/jira/tasks/user_extractor.go
index d117e827..2d5c855f 100644
--- a/plugins/jira/tasks/user_extractor.go
+++ b/plugins/jira/tasks/user_extractor.go
@@ -32,6 +32,7 @@ var ExtractUsersMeta = core.SubTaskMeta{
        EntryPoint:       ExtractUsers,
        EnabledByDefault: true,
        Description:      "extract Jira users",
+       DomainTypes:      []string{core.DOMAIN_TYPE_CROSS},
 }
 
 func ExtractUsers(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/worklog_collector.go 
b/plugins/jira/tasks/worklog_collector.go
index cdb11eea..4d8b0e70 100644
--- a/plugins/jira/tasks/worklog_collector.go
+++ b/plugins/jira/tasks/worklog_collector.go
@@ -35,6 +35,7 @@ var CollectWorklogsMeta = core.SubTaskMeta{
        EntryPoint:       CollectWorklogs,
        EnabledByDefault: true,
        Description:      "collect Jira work logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func CollectWorklogs(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/worklog_convertor.go 
b/plugins/jira/tasks/worklog_convertor.go
index 2f9385d4..ded11faa 100644
--- a/plugins/jira/tasks/worklog_convertor.go
+++ b/plugins/jira/tasks/worklog_convertor.go
@@ -34,6 +34,7 @@ var ConvertWorklogsMeta = core.SubTaskMeta{
        EntryPoint:       ConvertWorklogs,
        EnabledByDefault: true,
        Description:      "convert Jira work logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ConvertWorklogs(taskCtx core.SubTaskContext) error {
diff --git a/plugins/jira/tasks/worklog_extractor.go 
b/plugins/jira/tasks/worklog_extractor.go
index 698c9c63..bd5e25e2 100644
--- a/plugins/jira/tasks/worklog_extractor.go
+++ b/plugins/jira/tasks/worklog_extractor.go
@@ -31,6 +31,7 @@ var ExtractWorklogsMeta = core.SubTaskMeta{
        EntryPoint:       ExtractWorklogs,
        EnabledByDefault: true,
        Description:      "extract Jira work logs",
+       DomainTypes:      []string{core.DOMAIN_TYPE_TICKET},
 }
 
 func ExtractWorklogs(taskCtx core.SubTaskContext) error {

Reply via email to