{
  "enumDefs": [
    {
      "name": "OperationalStatus",
      "description": "The media usage types.",
      "typeVersion": "1.0",
      "elementDefs": [{
        "ordinal": 0,
        "value": "DISABLED"
      },
        {
          "ordinal": 1,
          "value": "ENABLED"
        }
      ]
    }
  ],
  "structDefs": [],
  "classificationDefs": [],
  "entityDefs": [
    {
      "name": "SoftwareServer",
      "description": "Software Servers describe the middleware software servers (such as application servers, data movement engines and database servers) that run on the Hosts. Within the Software Server model, we capture the userid that it runs under. Most metadata repositories are run in a secure mode requiring incoming requests to incluye the requester's security credentials. Therefore we have an identifier for each unique logged on security identity (aka userId). This identity is recorded within specific entities and relationships when they are created or updated. By storing the user identifier for the server, it is possible to correlate the server with the changes to the metadata (and related data assets) that it makes.",
      "superTypes": [
        "ITInfrastructure"
      ],
      "typeVersion": "1.0",
      "attributeDefs": [
        {
          "name": "userid",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "type",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "version",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "source",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        }
      ]
    },
    {
      "name": "Endpoint",
      "description": "The endpoint defines the parameters needed to connect to the server. It also features in the Connection model used by applications and tools to call the server. Thus through the endpoint entity it is possible to link the connection to the underlying server.",
      "superTypes": ["Referenceable"],
      "typeVersion": "1.0",
      "attributeDefs": [
        {
          "name": "name",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "description",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "networkAddress",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "protocol",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "encrypted",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        }
      ]
    },
    {
      "name": "SoftwareServerCapability",
      "description": "Within the server are many capabilities. These range from full applications to security plugins to logging and encryption libraries. Different organizations and tools can choose the granularity in which the capabilities are captured in order to provide appropriate context to data assets and the decisions made around them.",
      "superTypes": [
        "Infrastructure"
      ],
      "typeVersion": "1.0",
      "attributeDefs": [{
        "name": "name",
        "typeName": "string",
        "cardinality": "SINGLE",
        "isIndexable": true,
        "isOptional": true,
        "isUnique": false
      },
        {
          "name": "description",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "type",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "version",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "patchLevel",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "source",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "properties",
          "typeName": "map<string,string>",
          "cardinality": "SINGLE",
          "isOptional": true,
          "isUnique": false
        }
      ]
    }
  ],
  "relationshipDefs": [
    {
      "name": "ServerEndpoint",
      "typeVersion": "1.0",
      "endDef1": {
        "name": "endpoints",
        "type": "SoftwareServer",
        "cardinality": "SET"
      },
      "endDef2": {
        "name": "server",
        "type": "Endpoint",
        "cardinality": "SINGLE"
      },
      "relationshipCategory": "ASSOCIATION"
    },
    {
      "name": "ServerSupportedCapability",
      "typeVersion": "1.0",
      "endDef1": {
        "name": "capabilities",
        "type": "SoftwareServer",
        "cardinality": "SET",
        "isContainer": true
      },
      "endDef2": {
        "name": "servers",
        "type": "SoftwareServerCapability",
        "cardinality": "SET"
      },
      "relationshipCategory": "AGGREGATION",
      "attributeDefs": [
        {
          "name": "deploymentTime",
          "typeName": "date",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "deployer",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "serverCapabilityStatus",
          "typeName": "OperationalStatus",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        }
      ]
    },
    {
      "name": "ServerDeployment",
      "typeVersion": "1.0",
      "endDef1": {
        "name": "deployedServers",
        "type": "Host",
        "cardinality": "SET",
        "isContainer": true
      },
      "endDef2": {
        "name": "host",
        "type": "SoftwareServer",
        "cardinality": "SINGLE"

      },
      "relationshipCategory": "AGGREGATION",
      "attributeDefs": [
        {
          "name": "deploymentTime",
          "typeName": "date",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "deployer",
          "typeName": "string",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        },
        {
          "name": "serverCapabilityStatus",
          "typeName": "OperationalStatus",
          "cardinality": "SINGLE",
          "isIndexable": true,
          "isOptional": true,
          "isUnique": false
        }
      ]
    }
  ]
}