package abaputils import ( "reflect" "github.com/SAP/jenkins-library/pkg/log" ) //ObjectSet in form of packages and software components to be checked type ObjectSet struct { PackageNames []Package `json:"packages,omitempty"` SoftwareComponents []SoftwareComponents `json:"softwarecomponents,omitempty"` PackageTrees []PackageTree `json:"packagetrees,omitempty"` Type string `json:"type,omitempty"` MultiPropertySet MultiPropertySet `json:"multipropertyset,omitempty"` Set []Set `json:"set,omitempty"` } //MultiPropertySet that can possibly contain any subsets/object of the OSL type MultiPropertySet struct { Type string `json:"type,omitempty"` PackageNames []Package `json:"packages,omitempty"` PackageTrees []PackageTree `json:"packagetrees,omitempty"` ObjectTypeGroups []ObjectTypeGroup `json:"objecttypegroups,omitempty"` ObjectTypes []ObjectType `json:"objecttypes,omitempty"` Owners []Owner `json:"owners,omitempty"` ReleaseStates []ReleaseState `json:"releasestates,omitempty"` Versions []Version `json:"versions,omitempty"` ApplicationComponents []ApplicationComponent `json:"applicationcomponents,omitempty"` SoftwareComponents []SoftwareComponents `json:"softwarecomponents,omitempty"` TransportLayers []TransportLayer `json:"transportlayers,omitempty"` Languages []Language `json:"languages,omitempty"` SourceSystems []SourceSystem `json:"sourcesystems,omitempty"` } //Set type Set struct { Type string `json:"type,omitempty"` Set []Set `json:"set,omitempty"` PackageSet []PackageSet `json:"package,omitempty"` FlatObjectSet []FlatObjectSet `json:"object,omitempty"` ComponentSet []ComponentSet `json:"component,omitempty"` TransportSet []TransportSet `json:"transport,omitempty"` ObjectTypeSet []ObjectTypeSet `json:"objecttype,omitempty"` } //PackageSet in form of packages to be checked type PackageSet struct { Name string `json:"name,omitempty"` IncludeSubpackages *bool `json:"includesubpackages,omitempty"` } //FlatObjectSet type FlatObjectSet struct { Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` } //ComponentSet in form of software components to be checked type ComponentSet struct { Name string `json:"name,omitempty"` } //TransportSet in form of transports to be checked type TransportSet struct { Number string `json:"number,omitempty"` } //ObjectTypeSet type ObjectTypeSet struct { Name string `json:"name,omitempty"` } //Package for MPS type Package struct { Name string `json:"name,omitempty"` } //Packagetree for MPS type PackageTree struct { Name string `json:"name,omitempty"` } //ObjectTypeGroup type ObjectTypeGroup struct { Name string `json:"name,omitempty"` } //ObjectType type ObjectType struct { Name string `json:"name,omitempty"` } //Owner type Owner struct { Name string `json:"name,omitempty"` } //ReleaseState type ReleaseState struct { Value string `json:"value,omitempty"` } //Version type Version struct { Value string `json:"value,omitempty"` } //ApplicationComponent type ApplicationComponent struct { Name string `json:"name,omitempty"` } //SoftwareComponents type SoftwareComponents struct { Name string `json:"name,omitempty"` } //TransportLayer type TransportLayer struct { Name string `json:"name,omitempty"` } //Language type Language struct { Value string `json:"value,omitempty"` } //SourceSystem type SourceSystem struct { Name string `json:"name,omitempty"` } func BuildOSLString(OSLConfig ObjectSet) (objectSetString string) { //Build ObjectSets s := OSLConfig if s.Type == "" { s.Type = "multiPropertySet" } switch s.Type { case "multiPropertySet": objectSetString += `` if !(reflect.DeepEqual(s.PackageNames, Package{})) || !(reflect.DeepEqual(s.SoftwareComponents, SoftwareComponents{})) { //To ensure Scomps and packages can be assigned on this level mps := MultiPropertySet{ PackageNames: s.PackageNames, SoftwareComponents: s.SoftwareComponents, } objectSetString += writeObjectSetProperties(mps) } objectSetString += writeObjectSetProperties(s.MultiPropertySet) if !(reflect.DeepEqual(s.MultiPropertySet, MultiPropertySet{})) { log.Entry().Info("Wrong configuration has been detected: MultiPropertySet has been used. Please note that there is no official documentation for this usage. Please check the step documentation for more information") } for _, t := range s.Set { log.Entry().Infof("Wrong configuration has been detected: %s has been used. This is currently not supported and this set will not be included in this run. Please check the step documentation for more information", t.Type) } objectSetString += `` default: log.Entry().Infof("Wrong configuration has been detected: %s has been used. This is currently not supported and this set will not be included in this run. Please check the step documentation for more information", s.Type) } return objectSetString } func writeObjectSetProperties(set MultiPropertySet) (objectSetString string) { for _, packages := range set.PackageNames { objectSetString += `` } for _, packagetrees := range set.PackageTrees { objectSetString += `` } for _, objectTypeGroup := range set.ObjectTypeGroups { objectSetString += `` } for _, objectType := range set.ObjectTypes { objectSetString += `` } for _, owner := range set.Owners { objectSetString += `` } for _, releaseState := range set.ReleaseStates { objectSetString += `` } for _, version := range set.Versions { objectSetString += `` } for _, applicationComponent := range set.ApplicationComponents { objectSetString += `` } for _, component := range set.SoftwareComponents { objectSetString += `` } for _, transportLayer := range set.TransportLayers { objectSetString += `` } for _, language := range set.Languages { objectSetString += `` } for _, sourceSystem := range set.SourceSystems { objectSetString += `` } return objectSetString }