{
    "$schema": "../../../common/Ruleset.schema.json",
    "id": "Functional",
    "supplementationInfo": {
        "supplementationPurpose": "Functional specific customization rules"
    },
    "requiredSchemas": [
        {
            "name": "BisCore"
        },
        {
            "name": "Functional"
        }
    ],
    "rules": [
        {
            "ruleType": "ContentModifier",
            "class": {
                "schemaName": "Functional",
                "className": "FunctionalElement"
            },
            "relatedProperties": [
                {
                    "propertiesSource": {
                        "relationship": {
                            "schemaName": "Functional",
                            "className": "FunctionalElementIsOfType"
                        },
                        "direction": "Forward"
                    },
                    "handleTargetClassPolymorphically": true,
                    "relationshipMeaning": "RelatedInstance",
                    "nestedRelatedProperties": [
                        {
                            "propertiesSource": {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsUniqueAspect"
                                },
                                "direction": "Forward"
                            },
                            "handleTargetClassPolymorphically": true,
                            "relationshipMeaning": "SameInstance"
                        },
                        {
                            "propertiesSource": {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsMultiAspects"
                                },
                                "direction": "Forward"
                            },
                            "handleTargetClassPolymorphically": true,
                            "relationshipMeaning": "SameInstance"
                        }
                    ]
                }
            ]
        },
        {
            "ruleType": "Content",
            "condition": "ContentDisplayType = \"Graphics\" ANDALSO SelectedNode.IsOfClass(\"FunctionalElement\", \"Functional\")",
            "onlyIfNotHandled": true,
            "specifications": [
                {
                    "specType": "ContentRelatedInstances",
                    "relationshipPaths": [
                        [
                            {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsChildElements"
                                },
                                "direction": "Forward",
                                "targetClass": {
                                    "schemaName": "Functional",
                                    "className": "FunctionalElement"
                                },
                                "count": "*"
                            },
                            {
                                "relationship": {
                                    "schemaName": "Functional",
                                    "className": "PhysicalElementFulfillsFunction"
                                },
                                "direction": "Backward"
                            },
                            {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsChildElements"
                                },
                                "direction": "Forward",
                                "targetClass": {
                                    "schemaName": "BisCore",
                                    "className": "GeometricElement"
                                },
                                "count": "*"
                            }
                        ],
                        [
                            {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsChildElements"
                                },
                                "direction": "Forward",
                                "targetClass": {
                                    "schemaName": "Functional",
                                    "className": "FunctionalElement"
                                },
                                "count": "*"
                            },
                            {
                                "relationship": {
                                    "schemaName": "Functional",
                                    "className": "DrawingGraphicRepresentsFunctionalElement"
                                },
                                "direction": "Backward"
                            },
                            {
                                "relationship": {
                                    "schemaName": "BisCore",
                                    "className": "ElementOwnsChildElements"
                                },
                                "direction": "Forward",
                                "targetClass": {
                                    "schemaName": "BisCore",
                                    "className": "GeometricElement"
                                },
                                "count": "*"
                            }
                        ]
                    ]
                }
            ]
        }
    ]
}
