github.com/qlik-oss/gopherciser@v0.18.6/senseobjects/loadmodellist.go (about) 1 package senseobjects 2 3 import ( 4 "context" 5 "sync" 6 7 "github.com/goccy/go-json" 8 "github.com/pkg/errors" 9 "github.com/qlik-oss/enigma-go/v4" 10 ) 11 12 type ( 13 // LoadModelList used to keep track of story list session object 14 LoadModelList struct { 15 enigmaObject *enigma.GenericObject 16 layout *enigma.GenericObjectLayout 17 properties *enigma.GenericObjectProperties 18 19 mutex sync.Mutex 20 } 21 ) 22 23 // CreateLoadModelListObject create LoadModelList session object 24 func CreateLoadModelListObject(ctx context.Context, doc *enigma.Doc) (*LoadModelList, error) { 25 properties := &enigma.GenericObjectProperties{ 26 Info: &enigma.NxInfo{ 27 Id: "LoadModelList", 28 Type: "LoadModelList", 29 }, 30 AppObjectListDef: &enigma.AppObjectListDef{ 31 Type: "LoadModel", 32 }, 33 } 34 35 obj, err := doc.CreateSessionObjectRaw(ctx, properties) 36 if err != nil { 37 return nil, errors.Wrapf(err, "Failed to create load model list session object in app<%s>", doc.GenericId) 38 } 39 40 return &LoadModelList{ 41 enigmaObject: obj, 42 }, nil 43 } 44 45 // UpdateLayout get and set a new layout for LoadModelList 46 func (loadModelList *LoadModelList) UpdateLayout(ctx context.Context) error { 47 if loadModelList.enigmaObject == nil { 48 return errors.Errorf("loadModelList enigma object is nil") 49 } 50 51 layoutRaw, err := loadModelList.enigmaObject.GetLayoutRaw(ctx) 52 if err != nil { 53 return errors.Wrap(err, "Failed to get loadModelList layout") 54 } 55 56 var layout enigma.GenericObjectLayout 57 err = json.Unmarshal(layoutRaw, &layout) 58 if err != nil { 59 return errors.Wrap(err, "Failed to unmarshal loadModelList layout") 60 } 61 62 loadModelList.setLayout(&layout) 63 return nil 64 } 65 66 func (loadModelList *LoadModelList) setLayout(layout *enigma.GenericObjectLayout) { 67 loadModelList.mutex.Lock() 68 defer loadModelList.mutex.Unlock() 69 loadModelList.layout = layout 70 } 71 72 // UpdateProperties get and set properties for LoadModelList 73 func (loadModelList *LoadModelList) UpdateProperties(ctx context.Context) error { 74 if loadModelList.enigmaObject == nil { 75 return errors.Errorf("loadModelList enigma object is nil") 76 } 77 78 propertiesRaw, err := loadModelList.enigmaObject.GetEffectivePropertiesRaw(ctx) 79 if err != nil { 80 return errors.Wrapf(err, "Failed to unmarshal loadModelList properties") 81 } 82 83 var properties enigma.GenericObjectProperties 84 err = json.Unmarshal(propertiesRaw, &properties) 85 if err != nil { 86 return errors.Wrap(err, "Failed to unmarshal loadModelList properties") 87 } 88 89 loadModelList.setProperties(&properties) 90 91 return nil 92 } 93 94 func (loadModelList *LoadModelList) setProperties(properties *enigma.GenericObjectProperties) { 95 loadModelList.mutex.Lock() 96 defer loadModelList.mutex.Unlock() 97 98 loadModelList.properties = properties 99 }