# This file is generated by profile_coder.py. DO NOT EDIT!

from __future__ import annotations

from gaphor.core.modeling.properties import (
    association,
    attribute,
    enumeration,
    relation_many,
    relation_one,
)
from gaphor.UML import (
    Abstraction,
    AcceptEventAction,
    ActivityEdge,
    ActivityPartition,
    AddStructuralFeatureValueAction,
    Behavior,
    ChangeEvent,
    Class,
    Classifier,
    Comment,
    Connector,
    ConnectorEnd,
    DataType,
    Dependency,
    DirectedRelationship,
    Element,
    Feature,
    Generalization,
    InstanceSpecification,
    InvocationAction,
    NamedElement,
    ObjectNode,
    Operation,
    Optional,
    Parameter,
    ParameterSet,
    Port,
    Property,
    StructuralFeature,
    Trigger,
)


class AbstractRequirement(NamedElement):
    externalId: attribute[str]
    text: attribute[str]


class AcceptChangeStructuralFeatureEventAction(AcceptEventAction):
    pass


class ElementPropertyPath(Element):
    propertyPath: relation_many[Property]


class AddFlowPropertyValueOnNestedPortAction(
    AddStructuralFeatureValueAction, ElementPropertyPath
):
    pass


class AdjuntProperty(Property):
    principal: relation_one[Element]


class DirectedRelationshipPropertyPath(DirectedRelationship):
    sourceContext: relation_one[Classifier]
    sourcePropertyPath: relation_many[Property]
    targetContext: relation_one[Classifier]
    targetPropertyPath: relation_many[Property]


class Allocate(Abstraction, DirectedRelationshipPropertyPath):
    pass


class AllocateActivityPartition(ActivityPartition):
    pass


class BindingConnector(Connector):
    pass


class Block(Class):
    isEncapsulated: attribute[int]


class EndPathMultiplicity(Property):
    pass


class BoundReference(EndPathMultiplicity):
    boundend: relation_many[ConnectorEnd]


class ChangeSructuralFeatureEvent(ChangeEvent):
    structuralFeature: relation_one[StructuralFeature]


class ClassifierBehaviorProperty(Property):
    pass


class Conform(Generalization):
    pass


class ConnectorProperty(Property):
    connector: relation_one[Connector]


class ConstraintBlock(Block):
    pass


class Rate(ActivityEdge, Parameter):
    rate: relation_many[InstanceSpecification]


class Continuous(Rate):
    pass


class ControlOperator(Behavior):
    pass


class Trace(Dependency, DirectedRelationshipPropertyPath):
    pass


class Copy(Trace):
    pass


class DeriveReqt(Trace):
    pass


class DirectedFeature(Feature):
    featureDirection: enumeration


class Discrete(Rate):
    pass


class DistributedProperty(Property):
    pass


class ElementGroup(Comment):
    name: attribute[str]
    orderedMember: relation_many[Element]


class Expose(Dependency):
    pass


class FlowProperty(Property):
    direction: enumeration


class FullPort(Port):
    pass


class InterfaceBlock(Block):
    pass


class InvocationOnNestedPortAction(ElementPropertyPath, InvocationAction):
    onNestedPort: relation_many[Port]


class NestedConnectorEnd(ConnectorEnd, ElementPropertyPath):
    pass


class NoBuffer(ObjectNode):
    pass


class Overwrite(ObjectNode):
    pass


class ParticipantProperty(Property):
    end_: relation_one[Property]


class Probability(ActivityEdge, ParameterSet):
    probability: attribute[str]


class Problem(Comment):
    pass


class PropertySpecificType(Classifier):
    pass


class ProxyPort(Port):
    pass


class Rationale(Comment):
    pass


class Refine(Dependency, DirectedRelationshipPropertyPath):
    pass


class Requirement(AbstractRequirement, Class):
    pass


class Satisfy(Trace):
    pass


class Stakeholder(Classifier):
    concernList: relation_many[Comment]


class Tagged(Property):
    nonunique: relation_many[bool]
    ordered: relation_many[bool]
    subsets: attribute[str]


class TestCase(Behavior):
    pass


class TriggerOnNestedPort(ElementPropertyPath, Trigger):
    onNestedPort: relation_many[Port]


class ValueType(DataType):
    quantityKind: relation_one[InstanceSpecification]
    unit: relation_one[InstanceSpecification]


class Verify(Trace):
    pass


class View(Class):
    pass


class Viewpoint(Class):
    concernList: relation_many[Comment]
    language: attribute[str]
    presentation: attribute[str]
    purpose: attribute[str]
    stakeholder: relation_many[Stakeholder]


AbstractRequirement.externalId = attribute("externalId", str)
AbstractRequirement.text = attribute("text", str)
AdjuntProperty.principal = association("principal", Element, upper=1)
Block.isEncapsulated = attribute("isEncapsulated", int)
BoundReference.boundend = association("boundend", ConnectorEnd, upper=1)
ChangeSructuralFeatureEvent.structuralFeature = association(
    "structuralFeature", StructuralFeature, upper=1
)
ConnectorProperty.connector = association("connector", Connector, upper=1)
DirectedFeature.featureDirection = enumeration(
    "featureDirection", ("required", "providedRequired", "provided"), "required"
)
DirectedRelationshipPropertyPath.sourceContext = association(
    "sourceContext", Classifier, upper=1
)
DirectedRelationshipPropertyPath.sourcePropertyPath = association(
    "sourcePropertyPath", Property
)
DirectedRelationshipPropertyPath.targetContext = association(
    "targetContext", Classifier, upper=1
)
DirectedRelationshipPropertyPath.targetPropertyPath = association(
    "targetPropertyPath", Property
)
ElementGroup.name = attribute("name", str)
ElementGroup.orderedMember = association("orderedMember", Element)
ElementPropertyPath.propertyPath = association("propertyPath", Property, lower=1)
FlowProperty.direction = enumeration("direction", ("out", "inout", "in"), "out")
InvocationOnNestedPortAction.onNestedPort = association("onNestedPort", Port, lower=1)
ParticipantProperty.end_ = association("end_", Property, upper=1)
Probability.probability = attribute("probability", str)
Rate.rate = association("rate", InstanceSpecification, upper=1)
Stakeholder.concernList = association("concernList", Comment)
Tagged.nonunique = association("nonunique", bool, upper=1)
Tagged.ordered = association("ordered", bool, upper=1)
Tagged.subsets = attribute("subsets", str)
TriggerOnNestedPort.onNestedPort = association("onNestedPort", Port, lower=1)
ValueType.quantityKind = association("quantityKind", InstanceSpecification, upper=1)
ValueType.unit = association("unit", InstanceSpecification, upper=1)
Viewpoint.concernList = association("concernList", Comment)
Viewpoint.language = attribute("language", str)
Viewpoint.presentation = attribute("presentation", str)
Viewpoint.purpose = attribute("purpose", str)
Viewpoint.stakeholder = association("stakeholder", Stakeholder)
