-
Notifications
You must be signed in to change notification settings - Fork 7
/
create_plantuml.go
114 lines (104 loc) · 4.01 KB
/
create_plantuml.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package catalog
import (
"fmt"
"os"
"github.com/anz-bank/sysl-catalog/pkg/catalogdiagrams"
"github.com/anz-bank/sysl/pkg/cmdutils"
"github.com/anz-bank/sysl/pkg/diagrams"
"github.com/anz-bank/sysl/pkg/integrationdiagram"
"github.com/anz-bank/sysl/pkg/sysl"
)
// IntegrationPlantuml creates an integration diagram and returns the plantuml string
func (p *Generator) IntegrationPlantuml(m *sysl.Module, title string, EPA bool) string {
type intsCmd struct {
diagrams.Plantumlmixin
cmdutils.CmdContextParamIntgen
}
integration := intsCmd{}
projectApp := createProjectApp(m.Apps)
project := "__TEMP__"
defer delete(p.RootModule.GetApps(), project)
p.RootModule.GetApps()[project] = projectApp
integration.Project = project
integration.Output = "integration" + TernaryOperator(EPA, "EPA", "").(string)
integration.Title = title
integration.EPA = EPA
integration.Clustered = true
result, err := integrationdiagram.GenerateIntegrations(&integration.CmdContextParamIntgen, p.RootModule, p.Log)
if err != nil {
p.Log.Error("Error creating integration diagram:", err)
os.Exit(1)
}
plantumlString := result[integration.Output]
return PlantUMLURL(p.PlantumlService, plantumlString)
}
// SequencePlantuml creates an sequence diagram and returns a plantuml url
func (p *Generator) SequencePlantuml(appName string, endpoint *sysl.Endpoint) string {
m := p.RootModule
call := fmt.Sprintf("%s <- %s", appName, endpoint.GetName())
plantumlString, err := CreateSequenceDiagram(m, call)
if err != nil {
p.Log.Error("Error creating sequence diagram:", err)
os.Exit(1)
return ""
}
return PlantUMLURL(p.PlantumlService, plantumlString)
}
// DataModelReturnPlantuml returns a return datamodel as a plantuml url
func (p *Generator) DataModelReturnPlantuml(appName string, stmnt *sysl.Statement, endpoint *sysl.Endpoint) string {
appName, typeName, t, recursive := p.ExtractReturnInfo(appName, stmnt, endpoint)
if t == nil {
return ""
}
return p.DataModelAliasPlantuml(appName, typeName, typeName, t, recursive)
}
// DataModelParamPlantuml creates a parameter data model and returns a plantuml url
func (p *Generator) DataModelParamPlantuml(app *sysl.Application, param Param) string {
defer func() {
if err := recover(); err != nil {
p.Log.Errorf("error creating param data model: %s", err)
}
}()
appName, typeName, aliasTypeName, getRecursive := p.ExtractTypeInfo(app, param)
return p.DataModelAliasPlantuml(appName, typeName, aliasTypeName, param.GetType(), getRecursive)
}
// DataModelAppPlantuml generates a data model for all of the types in app and returns a plantuml url
func (p *Generator) DataModelAppPlantuml(app *sysl.Application) string {
appName := GetAppNameString(app)
plantumlString := catalogdiagrams.GenerateDataModel(appName, catalogdiagrams.FromSyslTypeMap(appName, app.GetTypes()))
if _, ok := p.RootModule.GetApps()[appName]; !ok {
return ""
}
return PlantUMLURL(p.PlantumlService, plantumlString)
}
func (p *Generator) DataModelPlantuml(appName, typeName string, t *sysl.Type, recursive bool) string {
return p.DataModelAliasPlantuml(appName, typeName, typeName, t, recursive)
}
// DataModelAliasPlantuml generates a plantuml url for a alias data model
func (p *Generator) DataModelAliasPlantuml(appName, typeName, typeAlias string, t *sysl.Type, recursive bool) string {
m := p.RootModule
var plantumlString string
if recursive {
relatedTypes := catalogdiagrams.RecursivelyGetTypes(
appName,
map[string]*catalogdiagrams.TypeData{
typeAlias: catalogdiagrams.NewTypeData(typeAlias, NewTypeRef(appName, typeName)),
}, m,
)
plantumlString = catalogdiagrams.GenerateDataModel(appName, relatedTypes)
if _, ok := p.RootModule.GetApps()[appName]; !ok {
p.Log.Warnf("no app named %s", appName)
return ""
}
// Handle Empty
if len(relatedTypes) == 0 {
return ""
}
} else {
plantumlString = catalogdiagrams.GenerateDataModel(
appName,
map[string]*catalogdiagrams.TypeData{typeAlias: catalogdiagrams.NewTypeData(typeAlias, t)},
)
}
return PlantUMLURL(p.PlantumlService, plantumlString)
}