MCPcopy Create free account
hub / github.com/cloudwan/gohan / loadSchemaFromFile

Method loadSchemaFromFile

schema/manager.go:347–458  ·  view source on GitHub ↗

loadSchemaFromFile loads schema from json file - recursive version for nested schemas

(filePath string)

Source from the content-addressed store, hash-verified

345
346//loadSchemaFromFile loads schema from json file - recursive version for nested schemas
347func (manager *Manager) loadSchemaFromFile(filePath string) error {
348 if filePath == "" {
349 return nil
350 }
351 log.Info("Loading schema %s ...", filePath)
352 schemas, err := util.LoadMap(filePath)
353 if err != nil {
354 return err
355 }
356
357 namespaces, _ := schemas["namespaces"].([]interface{})
358 for _, namespaceData := range namespaces {
359 namespace, err := NewNamespace(namespaceData)
360 if err != nil {
361 return err
362 }
363 if err = manager.registerNamespace(namespace); err != nil {
364 return err
365 }
366 }
367
368 schemaObjList := []*Schema{}
369 schemaMap := map[string]*Schema{}
370 list, _ := schemas["schemas"].([]interface{})
371 for _, schemaData := range list {
372 if fileName, ok := schemaData.(string); ok {
373 err := manager.loadSchemaFromFile(fileName) // recursive call for included files
374 if err != nil {
375 return err
376 }
377 } else {
378 metaschema, _ := manager.schema("schema")
379 schemaObj, err := newSchemaFromObj(schemaData, metaschema)
380 if err != nil {
381 return err
382 }
383 schemaMap[schemaObj.ID] = schemaObj
384 schemaObjList = append(schemaObjList, schemaObj)
385 }
386 }
387 _, err = reorderSchemas(schemaObjList)
388 if err != nil {
389 log.Warning("Error in reordering schema %s", err)
390 }
391 for _, schemaObj := range schemaObjList {
392 if schemaObj.IsAbstract() {
393 // Register abstract schema
394 manager.registerSchema(schemaObj)
395 } else {
396 for _, baseSchemaID := range schemaObj.Extends {
397 baseSchema, ok := manager.schema(baseSchemaID)
398 if !ok {
399 return fmt.Errorf("Base Schema %s not found", baseSchemaID)
400 }
401 if !baseSchema.IsAbstract() {
402 return fmt.Errorf("Base Schema %s isn't abstract type", baseSchemaID)
403 }
404 schemaObj.Extend(baseSchema)

Callers 1

LoadSchemaFromFileMethod · 0.95

Calls 15

registerNamespaceMethod · 0.95
schemaMethod · 0.95
registerSchemaMethod · 0.95
NewNamespaceFunction · 0.85
newSchemaFromObjFunction · 0.85
reorderSchemasFunction · 0.85
NewPolicyFunction · 0.85
fixRelativeURLFunction · 0.85
NewExtensionFunction · 0.85
IsAbstractMethod · 0.80
DirMethod · 0.80
InfoMethod · 0.65

Tested by

no test coverage detected