| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SynchronizeAttributes (JSON jsondata) | 
| { | 
|   TextBody: | 
|   [* | 
|     new := construct( Lib3DS_Attributes ); | 
|      | 
|     attrnamedata := guard( jsondata.Get( 'attribute' ), null( JSON, owning ) ); | 
|     attrtypedata := guard( jsondata.Get( 'attribute.type' ), null( JSON, owning ) ); | 
|     attrvaluedata := guard( jsondata.Get( 'attribute.value' ), null( JSON, owning ) ); | 
|      | 
|     if( guard( attrnamedata.IsArray(), false ) | 
|         and guard( attrtypedata.IsArray(), false ) | 
|         and guard( attrvaluedata.IsArray(), false ) ) | 
|     { | 
|       for( i := 0; i < attrnamedata.Size(); i++ ) | 
|       { | 
|         attr := Lib3DS_Attribute::FindOrCreate( this, attrnamedata.Get( i ).GetString() ); | 
|         attr.Type( guard( attrtypedata.Get( i ).GetString(), '' ) ); | 
|         attr.Value( guard( attrvaluedata.Get( i ).GetString(), '' ) ); | 
|         new.Add( attr ); | 
|       } | 
|     } | 
|     else // Read individual attributes | 
|     { | 
|       // Traverse all properties | 
|       for( i := 0; i < jsondata.Size(); i++ ) | 
|       { | 
|         key := jsondata.GetProperty( i ); | 
|      | 
|         // Find attribute properties (type or value) | 
|         if( key.Wildcard( 'attribute[*].type' ) or key.Wildcard( 'attribute[*].value' ) ) | 
|         { | 
|           // Extract property name | 
|           start := key.FindString( '[', 0 ) + 1; | 
|           end := key.FindString( ']', 0 ); | 
|           count := end - start; | 
|           attrname := key.SubString( start, count ); | 
|            | 
|           // Find or create attribute object | 
|           attr := Lib3DS_Attribute::FindOrCreate( this, attrname ); | 
|           if( key.EndsWith( 'type' ) ) | 
|           { | 
|             attr.Type( guard( jsondata.Get( key ).GetString(), '' ) ); | 
|           } | 
|           else if( key.EndsWith( 'value' ) ) | 
|           { | 
|             attr.Value( guard( jsondata.Get( key ).GetString(), '' ) ); | 
|           } | 
|           new.Add( attr ); | 
|         } | 
|       } | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |