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  }