Plantuml sequence diagrams to interface scenarios

Hi,

I am new to Capella and I need to convert a Plantu]Uml sequence diagram into an interface scenario.

I am missing something when creating a sequenceMessage. I am creating an Execution for the message but it does not show up in either the model or on the diagram (same thing with the execution finish event).

What am I missing?

def create_execution(scenario, sequenceMessage, instanceRole, messageEndStart):
  execution = create(“http://www.polarsys.org/capella/core/interaction/” + capella_version(), “Execution”)
  print("Execution: ", dir(execution))execution.setStart(messageEndStart)

  messageEndFinish = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "ExecutionEnd")
  print("messageEndFinish: ", dir(messageEndFinish))
  messageEndFinish.getCoveredInstanceRoles().add(instanceRole)
  #messageEndFinish.setExecution().add(execution)
  messageEndFinish.setName("endExec")

  executionEvent = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "ExecutionEvent")
  executionEvent.setName("[Execution Event]")
  messageEndFinish.setEvent(executionEvent)

  execution.setFinish(messageEndFinish)
  #scenario.getOwnedEvents().add(messageEndFinish)
  return execution

I think you just need to add the created Execution to the Senario’s ownedTimeLapses:

scenario.get_java_object().getOwnedTimeLapses().add(execution.get_java_object())

You can always access the Java API from your Python script. For more details you can check the Tips and Tricks section of the documentation.

I tried that and the model does no longer get populated. I was expecting to get a new capability, a new scenario, but they no longer appear in the model when adding the execution to the sccenario’s owned timelapses. I also get no error or exception.

The sequence diagram and the Scenario model structure need to be correct in order for the message and diagram to work. I created the following script that work on the Capella IFE example:

session = Sirius.get_session(se.get_java_object())

entertain_during_flight_oc = se.get_all_contents_by_type(OperationalCapability)[0]
description = get_representation_definition_by_name(session, "Operational Interaction Scenario")

aircraft = None
for actor in se.get_all_contents_by_type(OperationalEntity):
    if actor.get_name() == "Aircraft":
        aircraft = actor
        break

passenger = None
for actor in se.get_all_contents_by_type(OperationalActor):
    if  actor.get_name() == "Passenger":
        passenger = actor
        break

ambiance_music = None
for exchange in se.get_all_contents_by_type(FunctionalExchange):
    if  exchange.get_name() == "Ambiance Music":
        ambiance_music = exchange
        break


model.start_transaction()
try:
    # create InstanceRoles
    my_scenario = Scenario()
    entertain_during_flight_oc.get_owned_scenarios().add(my_scenario)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(my_scenario.get_java_object())
    my_scenario.set_name("My Scenario")
    aircraft_ir = InstanceRole()
    my_scenario.get_owned_instance_roles().add(aircraft_ir)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(aircraft_ir.get_java_object())
    aircraft_ir.get_java_object().setRepresentedInstance(aircraft.get_java_object().getAbstractTypedElements()[0])
    passenger_ir = InstanceRole()
    my_scenario.get_owned_instance_roles().add(passenger_ir)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(passenger_ir.get_java_object())
    passenger_ir.get_java_object().setRepresentedInstance(passenger.get_java_object().getAbstractTypedElements()[0])



    # create SequenceMessage
    message  = SequenceMessage()
    my_scenario.get_owned_messages().add(message)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(my_scenario.get_java_object())
    message.get_java_object().setKind(get_enum_literal("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "MessageKind", "ASYNCHRONOUS_CALL"))
    message.set_name("Ambiance Music")
    
    # create MessageEnds
    sendingEnd = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "MessageEnd")
    my_scenario.get_java_object().getOwnedInteractionFragments().add(sendingEnd)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(sendingEnd)
    sendingEnd.setName("Send Call Message Call")
    sendingEnd.getCoveredInstanceRoles().add(aircraft_ir.get_java_object())
    
    receivingEnd = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "MessageEnd")
    my_scenario.get_java_object().getOwnedInteractionFragments().add(receivingEnd)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(receivingEnd)
    receivingEnd.setName("Receive Call Message Call")
    receivingEnd.getCoveredInstanceRoles().add(passenger_ir.get_java_object())
    
    message.get_java_object().setSendingEnd(sendingEnd)
    message.get_java_object().setReceivingEnd(receivingEnd)

    # create ExecutionEnd
    executionEnd = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "ExecutionEnd")
    my_scenario.get_java_object().getOwnedInteractionFragments().add(executionEnd)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(executionEnd)
    executionEnd.setName("endExec")
    executionEnd.getCoveredInstanceRoles().add(passenger_ir.get_java_object())
    

    # create Execution
    execution = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "Execution")
    my_scenario.get_java_object().getOwnedTimeLapses().add(execution)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(execution)
    execution.setStart(receivingEnd)
    execution.setFinish(executionEnd)

    # create EventSentOperation
    eventSentOperation = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "EventSentOperation")
    my_scenario.get_java_object().getOwnedEvents().add(eventSentOperation)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(eventSentOperation)
    eventSentOperation.setOperation(ambiance_music.get_java_object())

    sendingEnd.setEvent(eventSentOperation)

    # create EventReceiptOperation
    eventReceiptOperation = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "EventReceiptOperation")
    my_scenario.get_java_object().getOwnedEvents().add(eventReceiptOperation)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(eventReceiptOperation)
    eventReceiptOperation.setOperation(ambiance_music.get_java_object())
    
    receivingEnd.setEvent(eventReceiptOperation)

    # create ExecutionEvent
    executionEvent = create("http://www.polarsys.org/capella/core/interaction/" + capella_version(), "ExecutionEvent")
    my_scenario.get_java_object().getOwnedEvents().add(executionEvent)
    org.polarsys.capella.core.model.helpers.CapellaElementExt.creationService(executionEvent)

    executionEnd.setEvent(executionEvent)

    # create the diagram
    new_represenation = create_representation(session, my_scenario, description, "[OES] My Scenario")
except:
    # if something went wrong we rollback the transaction
    model.rollback_transaction()
    raise
else:
    # if everything is ok we commit the transaction
    model.commit_transaction()

# save the Capella model
model.save()

I hope you will find the missing part of your script in that script.

Thank you, it’s working fine!

1 Like