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