Handling AoS & Default ValuesΒΆ

This example focuses on handling arrays of structures and default values.

public static void defaultValuesAndAosOperations() throws Exception {

    try {
    
        imas.edge_profiles emptyEdgeProfiles = new imas.edge_profiles();
        emptyEdgeProfiles.ids_properties.homogeneous_time = LowLevel.IDS_TIME_MODE_HOMOGENEOUS;
        
        // edge_profiles/grid_gdd is array of structures and it must be resized before accessing any of it's elements
        emptyEdgeProfiles.grid_ggd = new imas.edge_profiles.grid_ggdClass[1];
        emptyEdgeProfiles.grid_ggd[0] = new imas.edge_profiles.grid_ggdClass();
        emptyEdgeProfiles.grid_ggd[0].identifier.name = "Structure before resize";

        System.out.println("\nSize of grid_ggd before resize: " + emptyEdgeProfiles.grid_ggd.length);
        System.out.println("Message in 'emptyEdgeProfiles.grid_ggd[0]' before resize: " + emptyEdgeProfiles.grid_ggd[0].identifier.name);

        int size_of_grid = 2;

        // resize field of Array of Structures to specified size
        // resizing this way will destroy stored data
        emptyEdgeProfiles.grid_ggd = new imas.edge_profiles.grid_ggdClass[size_of_grid];
        for (int i = 0; i < size_of_grid; i++) {
            emptyEdgeProfiles.grid_ggd[i] = new imas.edge_profiles.grid_ggdClass();
        }

        System.out.println("\nSize of grid_ggd after resize: " + emptyEdgeProfiles.grid_ggd.length);
        System.out.println("Message in 'emptyEdgeProfiles.grid_ggd[0]' after resize(data destroyed): " + emptyEdgeProfiles.grid_ggd[0].identifier.name);

        emptyEdgeProfiles.grid_ggd[0].identifier.name = "First test struct";
        emptyEdgeProfiles.grid_ggd[1].identifier.name = "Second test struct";
        
        // now we want to resize grid_ggd to 3 and keep previously existing data
        // in order to do that we have to use temporary variable to keep existing data
        size_of_grid++;
        imas.edge_profiles.grid_ggdClass[] tmp_grid = new imas.edge_profiles.grid_ggdClass[size_of_grid];
        for (int i = 0; i < emptyEdgeProfiles.grid_ggd.length; i++) {
            tmp_grid[i] = emptyEdgeProfiles.grid_ggd[i];
        }
        emptyEdgeProfiles.grid_ggd = tmp_grid;
        
        System.out.println("\nSize of grid_ggd after resize to 3: " + emptyEdgeProfiles.grid_ggd.length);
        System.out.println("Message in 'emptyEdgeProfiles.grid_ggd[0]' after resize: " + emptyEdgeProfiles.grid_ggd[0].identifier.name);
        System.out.println("Message in 'emptyEdgeProfiles.grid_ggd[1]' after resize: " + emptyEdgeProfiles.grid_ggd[1].identifier.name);

        // now we'll create another IDS which will be saved inside previously created object.
        imas.edge_profiles emptyEdgeProfiles2 = new imas.edge_profiles();
        emptyEdgeProfiles2.ids_properties.homogeneous_time = LowLevel.IDS_TIME_MODE_HOMOGENEOUS;
        emptyEdgeProfiles2.grid_ggd = new imas.edge_profiles.grid_ggdClass[1];
        emptyEdgeProfiles2.grid_ggd[0] = new imas.edge_profiles.grid_ggdClass();
        emptyEdgeProfiles2.grid_ggd[0].identifier.name = "Third test struct";

        emptyEdgeProfiles.grid_ggd[2] = emptyEdgeProfiles2.grid_ggd[0];

        System.out.println("\nAll messages saved in grid_ggd: ");
        System.out.println(emptyEdgeProfiles.grid_ggd[0].identifier.name);
        System.out.println(emptyEdgeProfiles.grid_ggd[1].identifier.name);
        System.out.println(emptyEdgeProfiles.grid_ggd[2].identifier.name);

        // IDS fields have default values different for every data type
        System.out.println(String.format("\nDefault value for 'INT' data  (edge_profiles/midplane/index) %35s ",":") + emptyEdgeProfiles.midplane.index); 
        System.out.println(String.format("Default value for 'FLOAT' data  (edge_profiles/vacuum_toroidal_field/vacuum_toroidal_field/r0) : " + emptyEdgeProfiles.vacuum_toroidal_field.r0));
        System.out.println(String.format("Default value for 'COMPLEX' data %63s ", ":") + LowLevel.EMPTY_COMPLEX);
        System.out.println(String.format("Default value for 1+ dimensional data %58s ", ":") + emptyEdgeProfiles.vacuum_toroidal_field.b0);

    } catch (Exception e) {
        System.err.println("Following exception occurred\n" + e.getMessage());
        throw e;
    }   
}