xml/psRadiantOne.Format.DataCatalog.ps1xml

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <ViewDefinitions>
    <!--
      Data catalog: data sources, the types they are built from, and the schemas, tables, fields and
      relationships extracted from them.

      A type returned as a collection leads with a table. A list follows where the type carries a
      date, an array or a nested object, which the automatic list renders as raw UTC,
      System.Object[] or @{...}.
    -->
    <View>
      <Name>psRadiantOne.DataSource</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.DataSource</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>24</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>category</Label>
            <Width>10</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>type</Label>
            <Width>14</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>active</Label>
            <Width>7</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>defaultSchema</Label>
            <Width>18</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>endpoint</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>category</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>type</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>active</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>defaultSchema</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>if (-not ([string]::IsNullOrEmpty($_.url))) { $_.url } elseif (-not ([string]::IsNullOrEmpty($_.host))) { "$($_.host):$($_.port)" }</ScriptBlock>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.DataSource.List</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.DataSource</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem>
                <PropertyName>name</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>category</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>type</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>dbmsName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>description</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>active</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>readOnly</PropertyName>
              </ListItem>
              <ListItem>
                <Label>createdOn</Label>
                <ScriptBlock>if ($null -ne $_.createdOn) { ([datetime]$_.createdOn).ToLocalTime().ToString('g') }</ScriptBlock>
              </ListItem>
              <ListItem>
                <PropertyName>defaultSchema</PropertyName>
              </ListItem>
              <ListItem>
                <Label>addedSchemas</Label>
                <ScriptBlock>$_.addedSchemas -join ', '</ScriptBlock>
              </ListItem>
              <ListItem>
                <PropertyName>driverClassName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>url</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>username</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>host</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>port</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>ssl</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>verifySslHostname</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>bindDn</PropertyName>
              </ListItem>
              <ListItem>
                <!--
                  The API withholds the bind password: an empty string where one is set, null where
                  none is. Printing the empty string reads as no password, the opposite of what the
                  value means.
                -->
                <Label>password</Label>
                <ScriptBlock>if ($null -eq $_.password) { '(not set)' } else { '(set)' }</ScriptBlock>
              </ListItem>
              <ListItem>
                <PropertyName>baseDn</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>pagedResultsControl</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>pageSize</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>chaseReferrals</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>failOverName</PropertyName>
              </ListItem>
              <ListItem>
                <Label>failovers</Label>
                <ScriptBlock>$_.failovers -join ', '</ScriptBlock>
              </ListItem>
              <ListItem>
                <PropertyName>kerberosProfile</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>groupId</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>onPremHost</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>onPremPort</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>sdcMappings</PropertyName>
              </ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>
    <View>
      <Name>psRadiantOne.DataSourceType</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.DataSourceType</TypeName>
      </ViewSelectedBy>
      <!--
        The collection is not one shape: a type carries either pluginName, javaClassName and
        isSchemaExtractable, or icon and isLdap. A column for a property an object does not have
        renders empty, which is what is wanted here.
      -->
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>28</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>backendCategory</Label>
            <Width>16</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>readOnly</Label>
            <Width>9</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>schemaExtractable</Label>
            <Width>18</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>description</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>backendCategory</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>readOnly</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>isSchemaExtractable</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>description</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.DataSourceType.List</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.DataSourceType</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem>
                <PropertyName>name</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>description</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>backendCategory</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>userCreated</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>readOnly</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>isLdap</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>isSchemaExtractable</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>pluginName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>javaClassName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>driverClass</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>urlPattern</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>icon</PropertyName>
              </ListItem>
              <ListItem>
                <Label>meta</Label>
                <ScriptBlock>($_.meta | ForEach-Object { "$($_.name) [$($_.dataType)]$(if ($_.isRequired) { ' required' })" }) -join [System.Environment]::NewLine</ScriptBlock>
              </ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>
    <View>
      <Name>psRadiantOne.SchemaProperties</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.SchemaProperties</TypeName>
      </ViewSelectedBy>
      <!--
        Listing the schemas returns name and type only; a schema fetched by name carries the rest.
        The remaining columns are empty for the former.
      -->
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>24</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>type</Label>
            <Width>10</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>dataSourceName</Label>
            <Width>18</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>baseDn</Label>
            <Width>30</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>published</Label>
            <Width>10</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>lastModified</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>type</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>dataSourceName</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>baseDn</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>publishToServer</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>if ($null -ne $_.lastModified) { ([datetime]$_.lastModified).ToLocalTime().ToString('g') }</ScriptBlock>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.SchemaProperties.List</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.SchemaProperties</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem>
                <PropertyName>name</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>type</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>dataSourceName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>baseDn</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>publishToServer</PropertyName>
              </ListItem>
              <ListItem>
                <Label>lastModified</Label>
                <ScriptBlock>if ($null -ne $_.lastModified) { ([datetime]$_.lastModified).ToLocalTime().ToString('g') }</ScriptBlock>
              </ListItem>
              <ListItem>
                <PropertyName>objects</PropertyName>
              </ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>
    <View>
      <Name>psRadiantOne.SchemaComplete</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.SchemaComplete</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>24</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>type</Label>
            <Width>10</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>dataSourceName</Label>
            <Width>18</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>tables</Label>
            <Width>8</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>relationships</Label>
            <Width>14</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>type</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>dataSourceName</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>@($_.tablesWithFields).Count</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>@($_.relationships).Count</ScriptBlock>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.SchemaComplete.List</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.SchemaComplete</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem>
                <PropertyName>name</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>type</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>dataSourceName</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>baseDn</PropertyName>
              </ListItem>
              <ListItem>
                <PropertyName>publishToServer</PropertyName>
              </ListItem>
              <ListItem>
                <Label>lastModified</Label>
                <ScriptBlock>if ($null -ne $_.lastModified) { ([datetime]$_.lastModified).ToLocalTime().ToString('g') }</ScriptBlock>
              </ListItem>
              <ListItem>
                <Label>tablesWithFields</Label>
                <ScriptBlock>"$(@($_.tablesWithFields).Count) tables"</ScriptBlock>
              </ListItem>
              <ListItem>
                <Label>relationships</Label>
                <ScriptBlock>($_.relationships | ForEach-Object { "$($_.source) [$($_.sourceAttrs -join ', ')] to $($_.dest) [$($_.destAttrs -join ', ')]" }) -join [System.Environment]::NewLine</ScriptBlock>
              </ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>
    <View>
      <Name>psRadiantOne.Table</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.Table</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>26</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>schema</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>candidateKey</Label>
            <Width>14</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>primaryKeys</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>isTable</Label>
            <Width>8</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>objectClass</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.parent.name</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>candidateKeyName</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.primaryKeys -join ', '</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>isTable</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>objectClass</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.Field</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.Field</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>name</Label>
            <Width>28</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>table</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>type</Label>
            <Width>14</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>nullable</Label>
            <Width>9</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>primaryKey</Label>
            <Width>11</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>mappedAttrName</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>name</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.parent.name</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>type</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>nullable</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>primaryKey</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>mappedAttrName</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.Relationship</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.Relationship</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>id</Label>
            <Width>32</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>source</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>sourceAttrs</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>dest</Label>
            <Width>20</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>destAttrs</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>id</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>source</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.sourceAttrs -join ', '</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>dest</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.destAttrs -join ', '</ScriptBlock>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
    <View>
      <Name>psRadiantOne.RelationshipNode</Name>
      <ViewSelectedBy>
        <TypeName>psRadiantOne.RelationshipNode</TypeName>
      </ViewSelectedBy>
      <!--
        The root of a tree has no dn and carries every node below it in children, so the count is
        what tells the caller whether a tree was built.
      -->
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>rdn</Label>
            <Width>26</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>type</Label>
            <Width>10</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>children</Label>
            <Width>9</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>primaryObject</Label>
            <Width>24</Width>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>secondaryObject</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>rdn</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>type</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>@($_.children).Count</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>primaryObject</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>secondaryObject</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>