<ServerManagerConfiguration>
  <ProxyGroup name="internal_sources">
    <Proxy name="CDIReader"
           class="vtkCDIReader"
           label="CDIReader">
      <Documentation long_help="Reads CDI netCDF/GRIB (ICON) data."
                     short_help="Reads CDI netCDF/GRIB (ICON) data.">
      </Documentation>

      <StringVectorProperty name="FileName"
                            animateable="0"
                            command="SetFileName"
                            number_of_elements="1"
                            panel_visibility="never">
        <FileListDomain name="files" />
        <Documentation>
          This property specifies the netCDF/GRIB file name for the CDI reader.
        </Documentation>
      </StringVectorProperty>

      <StringVectorProperty command="GetAllDimensions"
                            information_only="1"
                            name="DimensionInfo">
        <StringArrayHelper />
      </StringVectorProperty>

      <StringVectorProperty animatelable="0"
                            command="SetDimensions"
                            name="Dimensions"
                            number_of_elements="1"
                            panel_visibility="default">
        <StringListDomain name="array_list">
          <RequiredProperties>
            <Property function="ArrayList"
                      name="DimensionInfo" />
          </RequiredProperties>
        </StringListDomain>
        <Documentation>
          Load the grid with the given dimensions.
        </Documentation>
      </StringVectorProperty>

      <StringVectorProperty command="GetVariableDimensions"
                            information_only="1"
                            name="VariableDimensionInfo">
        <StringArrayHelper />
      </StringVectorProperty>

      <StringVectorProperty command="GetAllVariableArrayNames"
                            information_only="1"
                            name="VariableArrayInfo">
        <StringArrayHelper />
      </StringVectorProperty>

      <StringVectorProperty name="PointArrayInfo"
                            information_only="1">
        <ArraySelectionInformationHelper attribute_name="Point"/>
      </StringVectorProperty>

      <StringVectorProperty name="PointArrayStatus"
                            command="SetPointArrayStatus"
                            number_of_elements="2"
                            repeat_command="1"
                            number_of_elements_per_command="2"
                            element_types="2 0"
                            information_property="PointArrayInfo" >
        <ArraySelectionDomain name="array_list" >
          <RequiredProperties>
            <Property name="PointArrayInfo" function="ArrayList"/>
          </RequiredProperties>
        </ArraySelectionDomain>
        <Documentation>
          This list shows the available point variables.
        </Documentation>
      </StringVectorProperty>

      <StringVectorProperty name="CellArrayInfo"
                            information_only="1" >
        <ArraySelectionInformationHelper attribute_name="Cell"/>
      </StringVectorProperty>

      <StringVectorProperty name="CellArrayStatus"
                            command="SetCellArrayStatus"
                            number_of_elements="2"
                            repeat_command="1"
                            number_of_elements_per_command="2"
                            element_types="2 0"
                            information_property="CellArrayInfo" >
        <ArraySelectionDomain name="array_list" >
          <RequiredProperties>
            <Property name="CellArrayInfo" function="ArrayList"/>
          </RequiredProperties>
        </ArraySelectionDomain>
        <Documentation>
          This list shows the available cell variables.
        </Documentation>
      </StringVectorProperty>



      <StringVectorProperty name="DomainArrayInfo"
                            information_only="1" >
        <ArraySelectionInformationHelper attribute_name="Domain"/>
      </StringVectorProperty>

      <StringVectorProperty name="DomainArrayStatus"
                            command="SetDomainArrayStatus"
                            number_of_elements="2"
                            repeat_command="1"
                            number_of_elements_per_command="2"
                            element_types="2 0"
                            information_property="DomainArrayInfo" >
        <ArraySelectionDomain name="array_list" >
          <RequiredProperties>
            <Property name="DomainArrayInfo" function="ArrayList"/>
          </RequiredProperties>
        </ArraySelectionDomain>
        <Documentation>
          This list shows the available ICON domain variables (for simulation performance analysis).
        </Documentation>
      </StringVectorProperty>

      <IntVectorProperty name="Show3DSurface"
                         label="Show 3D Surface (or chose the level in the field below)"
                         command="SetShowMultilayerView"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch on for 3D rendering of the data. 2D arrays show the same data on all levels.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="SetProjection"
                         label="Set Projection: "
                         command="SetProjection"
                         number_of_elements="1"
                         default_values="1">
        <EnumerationDomain name="enum">
          <Entry value="0" text="Spherical Projection"/>
          <Entry value="1" text="Lon/Lat Projection"/>
          <Entry value="2" text="Cassini Projection"/>
          <Entry value="3" text="Mollweide Projection"/>
          <Entry value="4" text="Catalyst (no scaling)"/>
          <Entry value="5" text="Spilhouse Projection"/>
        </EnumerationDomain>
        <Documentation>
          Select one out of four different projections for the data. The default is lon/lat projection.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="InvertZ"
                         label="Invert Z-Axis"
                         command="SetInvertZAxis"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch on to invert the rendering of the z-axis.
        </Documentation>
      </IntVectorProperty>

      <StringVectorProperty name="MaskingVarInfo"
                            information_only="1" >
        <ArraySelectionInformationHelper attribute_name="Cell"/>
      </StringVectorProperty>
      <StringVectorProperty name="MaskingValueVar"
			    label="Variable to use for masking miss vals"
                            command="SetMaskingVariable"
                            number_of_elements="1">
        <StringListDomain name="array_list" >
          <RequiredProperties>
            <Property name="MaskingVarInfo" function="ArraySelection"/>
          </RequiredProperties>
        </StringListDomain>
        <Documentation>
	  The variable to be used for determining the missing values for masking.
	  You can also just turn NaNs to transparent, but that can look weird b/c walls are missing.
        </Documentation>
      </StringVectorProperty>

      <IntVectorProperty name="UseMask"
                         label="Use Missing value mask"
                         command="SetUseMask"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch on to remove land structure contained in the variable "wet_c".
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="InvertMask"
                         label="Invert the missing value mask"
                         command="SetInvertMask"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
	  Invert the missing value mask.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="SkipGrid"
                         label="Skip the grid"
                         command="SetSkipGrid"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
	  Skip the grid (b/c it's known already).
        </Documentation>
      </IntVectorProperty>


      <IntVectorProperty name="UseCustomMaskValue"
                         label="Use a custom mask value"
                         command="SetUseCustomMaskValue"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
	  Use a custom value for masking.
        </Documentation>
      </IntVectorProperty>

      <DoubleVectorProperty name="CustomMaskValue"
                         label="Custom Value for masking"
                         command="SetCustomMaskValue"
                         number_of_elements="1"
                         default_values="0">
        <Documentation>
	  Choose the Value to use for masking instead of missval/_FillValue.
        </Documentation>
      </DoubleVectorProperty>

      <IntVectorProperty name="Read/OutputDoublePrecision"
                         label="Read/Output Double Precision"
                         command="SetDoublePrecision"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch between single and double precision output.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="WrapAround"
                         label="Wrap Cells in X/Y"
                         command="SetWrapping"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch between no wrapping, and wrapping in either X or Y direction.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="LoadClonAndClat"
                         label="Load Clon/Clat Coordinates"
                         command="SetShowClonClat"
                         number_of_elements="1"
                         default_values="0">
        <BooleanDomain name="bool" />
        <Documentation>
          Switch to load and show clon/clat coordinates.
        </Documentation>
      </IntVectorProperty>

      <IntVectorProperty name="LayerThicknessRangeInfo"
                         command="GetLayerThicknessRange"
                         information_only="1">
        <SimpleIntInformationHelper/>
      </IntVectorProperty>

      <IntVectorProperty name="LayerThickness"
                         label="3D Surface Thickness"
                         command="SetLayerThickness"
                         number_of_elements="1"
                         default_values="10">
        <IntRangeDomain name="LayerThicknessRange">
          <RequiredProperties>
            <Property name="LayerThicknessRangeInfo" function="Range"/>
          </RequiredProperties>
        </IntRangeDomain>
        <Documentation>
          Adjust the layer thickness for 3D rendering.
        </Documentation>
        <Hints>
          <Visibility replace_input="1" />
          <PropertyWidgetDecorator type="GenericDecorator"
            mode="enabled_state"
            property="Show3DSurface"
            value="1" />
        </Hints>
      </IntVectorProperty>

      <DoubleVectorProperty name="Layer0OffsetRangeInfo"
                         command="GetLayer0OffsetRange"
                         information_only="1">
        <SimpleDoubleInformationHelper/>
      </DoubleVectorProperty>

      <DoubleVectorProperty name="Layer0Offset"
                         label="3D Surface z offset for first layer"
                         command="SetLayer0Offset"
                         number_of_elements="1"
                         default_values="1e-30">
        <DoubleRangeDomain name="Layer0OffsetRange" min="-50" max="50" />
        <Documentation>
	  We don't know where to start the vertical colums (we don't have bounds). So we need one additional value. This will affect the thickness of the first layer in 3D.
        </Documentation>
        <Hints>
          <PropertyWidgetDecorator type="GenericDecorator"
            mode="enabled_state"
            property="Show3DSurface"
            value="1" />
        </Hints>
      </DoubleVectorProperty>

      <IntVectorProperty name="VerticalLevelRangeInfo"
                         command="GetVerticalLevelRange"
                         information_only="1">
        <SimpleIntInformationHelper/>
      </IntVectorProperty>

      <IntVectorProperty name="VerticalLevel"
                         command="SetVerticalLevel"
                         number_of_elements="1"
                         default_values="0">
        <IntRangeDomain name="range" >
          <RequiredProperties>
            <Property name="VerticalLevelRangeInfo" function="Range"/>
          </RequiredProperties>
        </IntRangeDomain>
        <Hints>
          <PropertyWidgetDecorator type="GenericDecorator"
            mode="enabled_state"
            property="Show3DSurface"
            value="0" />
        </Hints>
        <Documentation>
          Adjust the vertical level that is displayed. This is only available for 3D data sets.
        </Documentation>
      </IntVectorProperty>

      <DoubleVectorProperty name="TimestepValues"
                            repeatable="1"
                            information_only="1">
        <TimeStepsInformationHelper/>
      </DoubleVectorProperty>

    </Proxy>
  </ProxyGroup>

  <ProxyGroup name="sources">
    <SourceProxy class="vtkFileSeriesReader"
                 file_name_method="SetFileName"
                 label="CDIReader"
                 name="CDISeriesReader"
                 si_class="vtkSIMetaReaderProxy">
      <Documentation long_help="Reads irregular netCDF data (eg. ICON)."
                     short_help="Read irregular netCDF data."></Documentation>

      <SubProxy>
        <Proxy name="Reader"
               proxygroup="internal_sources"
               proxyname="CDIReader" />
        <ExposedProperties>
          <Property name="DimensionInfo" />
          <PropertyGroup label="Variables">
          <Property name="Dimensions" />
          <Property name="VariableDimensionInfo" />
          <Property name="VariableArrayInfo" />
          <Property name="PointArrayInfo" />
          <Property name="PointArrayStatus" />
          <Property name="CellArrayInfo" />
          <Property name="CellArrayStatus" />
          <Property name="DomainArrayInfo" />
          <Property name="DomainArrayStatus" />
          <Property name="LoadClonAndClat" />
	  </PropertyGroup>
          <PropertyGroup label="Projection">
          <Property name="SetProjection" />
          <Property name="WrapAround" />
          <Property name="InvertZ" />
          <Property name="Show3DSurface" />
          <Property name="VerticalLevelRangeInfo" />
          <Property name="VerticalLevel" />
          <Property name="LayerThicknessRangeInfo" />
          <Property name="LayerThickness" />
          <Property name="Layer0OffsetRangeInfo" />
          <Property name="Layer0Offset" />
	  </PropertyGroup>
          <PropertyGroup label="Masking / Missing Values">
          <Property name="MaskingValueVar" />
          <Property name="UseMask" />
          <Property name="InvertMask" />
          <Property name="SkipGrid" />
          <Property name="UseCustomMaskValue" />
          <Property name="CustomMaskValue" />
	  </PropertyGroup>
          <PropertyGroup label="Misc">
          <Property name="Read/OutputDoublePrecision" />
          </PropertyGroup>

        </ExposedProperties>
      </SubProxy>

      <StringVectorProperty command="GetCurrentFileName"
                            information_only="1"
                            name="FileNameInfo">
        <SimpleStringInformationHelper />
      </StringVectorProperty>

      <StringVectorProperty animateable="0"
                            clean_command="RemoveAllFileNames"
                            command="AddFileName"
                            name="FileNames"
                            number_of_elements="0"
                            panel_visibility="never"
                            repeat_command="1">
        <FileListDomain name="files" />
        <Documentation>
          The list of files to be read by the reader.
        </Documentation>
      </StringVectorProperty>

      <DoubleVectorProperty information_only="1"
                            name="TimestepValues"
                            repeatable="1">
        <TimeStepsInformationHelper />
        <Documentation>
          This magic property sends time information to the animation panel. ParaView will
          automatically set up the animation to visit the time steps defined in the file.
        </Documentation>
      </DoubleVectorProperty>

      <Hints>
        <ReaderFactory extensions="nc grb grib"
                       file_description="CDI netCDF/GRIB (ICON) files" />
      </Hints>

    </SourceProxy>
  </ProxyGroup>
</ServerManagerConfiguration>
