Metamodeling the structure and interaction behavior of cooperative component-based user interfaces
Developed work for Jornal of Universal Computer Science (JUCS)
In Web-based Cooperative Information Systems (WCIS), user groups with dierent roles cooperate through specialized interfaces. Cooperative interaction and user interface structures are usually rather complicated, and modeling has an important part in them. Model-Driven Engineering (MDE) is a software engineering discipline which assists engineers in abstracting system implementations by means of models and meta-models. This work describes an interactive, structural meta-model for user interfaces based on component architectures as a way to abstract, model, simplify and facilitate implementation. The work also presents a case study based on an Environmental Management Information Systems (EMIS), where three actors (a politician, a GIS expert, and a technician) cooperate in assessing natural disasters.
1. Basis meta-models of system | |
2. Simple running
example |
|
2.1. User interfaces |
|
2.2. User interaction sequence diagram | |
3. Architecture meta-model |
|
3.1. Interaction subset |
|
3.1. Structure subset |
1. Basis meta-models of system
The case study is related to a typical
cooperative decision-making
task in an Environmental Information System for assessing natural
disasters. This cooperative task assesses damage caused by a
catastrophe
in a particular land area (for instance, a wooded area).
The Politician's GUI has two components,
an information manager (DataManager) and a report generator
(ReportManager). The Expert's one has four interface components, a
geographic map viewer, a histogram viewer, an analysis generator and
online chat (used to communicate with the evaluator for
decision-making). The Evaluator's interface has three more interface
components, a report generator, a data evaluator and online chat.
2.2. User interaction sequence
diagram
The interaction sequence takes place in four steps:
1º.- A politician (PoliticianRole) initiates the cooperative task.The politician needs two assessments, one by a GIS expert who makes a technical evaluation, and the other an economic assessment based on the technical evaluation.
2º.- There is a GIS technician (ExpertGISRole) who is in charge of analyzing the afected areas in order to classify the types of soil, damaged infraestructure, the size of each area afected and so on.
3º.-There is an administrator (EvaluatorRole) who makes an economic estimate of the aected soil, damaged infraestructure, etc. based on the information provided by the expert.
4º.- Finally, the politician makes his final report based on the information prepared and coordinated in the cooperative process described above.
Next figure shows the proposals
architecture meta-model with its three parts:
(a) Meta-model interaction section (IM)
(b)Structure meta-model section (SM)
(c) Visual meta-model section (VM)
The interaction models groups of actors
and their interaction protocols through activities and tasks. The user
interface structure is modeled using components, ports and connectors.
The visual meta-model is described by a state machine.
[architecture_metamodel.ecore]
<?xml version="1.0" encoding="UTF-8"?>
<ecore:EPackage xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="architecture_metamodel"
nsURI="http://architecture_metamodel/1.0" nsPrefix="architecture_metamodel">
<eClassifiers xsi:type="ecore:EClass" name="ArchitectureModel" eSuperTypes="#//ComplexComponent">
<eStructuralFeatures xsi:type="ecore:EReference" name="interfaces" upperBound="-1"
eType="#//Interface" containment="true" eOpposite="#//Interface/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="events" upperBound="-1"
eType="#//Event" containment="true" eOpposite="#//Event/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="currentEvent" eType="#//Event"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="definitions" upperBound="-1"
eType="#//SimpleComponentDefinition" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Interface">
<eStructuralFeatures xsi:type="ecore:EReference" name="services" lowerBound="1"
upperBound="-1" eType="#//Services" containment="true" eOpposite="#//Services/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//ArchitectureModel" eOpposite="#//ArchitectureModel/interfaces"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Event" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//ArchitectureModel" eOpposite="#//ArchitectureModel/events"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="eventTransition" upperBound="-1"
eType="#//Transition" eOpposite="#//Transition/transitionEvent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="eventLaunched" upperBound="-1"
eType="#//LaunchEvent" eOpposite="#//LaunchEvent/launchedEvent"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SimpleEvent" eSuperTypes="#//Event"/>
<eClassifiers xsi:type="ecore:EClass" name="ComplexEvent" eSuperTypes="#//Event">
<eStructuralFeatures xsi:type="ecore:EReference" name="subEvents" upperBound="-1"
eType="#//Event" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ComplexComponent" eSuperTypes="#//Component">
<eStructuralFeatures xsi:type="ecore:EReference" name="subComponents" upperBound="-1"
eType="#//Component" containment="true" eOpposite="#//Component/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="connectors" upperBound="-1"
eType="#//Connector" containment="true" eOpposite="#//Connector/parent"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Component" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="ports" lowerBound="1" upperBound="-1"
eType="#//Port" containment="true" eOpposite="#//Port/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="visualBehaviour" eType="#//VisualBehaviourSM"
containment="true" eOpposite="#//VisualBehaviourSM/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="interactionBehaviour" eType="#//InteractionBehaviourSM"
containment="true" eOpposite="#//InteractionBehaviourSM/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//ComplexComponent"
eOpposite="#//ComplexComponent/subComponents"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="SimpleComponent" eSuperTypes="#//Component">
<eStructuralFeatures xsi:type="ecore:EReference" name="definition" lowerBound="1"
eType="#//SimpleComponentDefinition"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Connector">
<eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
eType="#//Provided"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//Required"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//ComplexComponent" eOpposite="#//ComplexComponent/connectors"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Port" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="port_interface" lowerBound="1"
eType="#//Interface"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Component" eOpposite="#//Component/ports"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Provided" eSuperTypes="#//Port"/>
<eClassifiers xsi:type="ecore:EClass" name="Required" eSuperTypes="#//Port"/>
<eClassifiers xsi:type="ecore:EClass" name="StateMachine" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="regions" lowerBound="1"
upperBound="-1" eType="#//Region" containment="true" eOpposite="#//Region/smParent"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Transition">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Region" eOpposite="#//Region/transitions"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="source" lowerBound="1"
eType="#//Vertex" eOpposite="#//Vertex/outgoing"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="target" lowerBound="1"
eType="#//Vertex" eOpposite="#//Vertex/incoming"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="transitionEvent" eType="#//Event"
eOpposite="#//Event/eventTransition"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="State" eSuperTypes="#//Vertex">
<eStructuralFeatures xsi:type="ecore:EReference" name="subRegions" upperBound="-1"
eType="#//Region" containment="true" eOpposite="#//Region/stateParent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="componentActivity" lowerBound="1"
eType="#//ComponentActivity" containment="true" eOpposite="#//ComponentActivity/parent"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="VisualBehaviourSM" eSuperTypes="#//StateMachine">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Component" eOpposite="#//Component/visualBehaviour"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InteractionBehaviourSM" eSuperTypes="#//StateMachine">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Component" eOpposite="#//Component/interactionBehaviour"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="interactionActivity" lowerBound="1"
eType="#//InteractionActivity" containment="true"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Services">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Interface" eOpposite="#//Interface/services"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Vertex" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//Region" eOpposite="#//Region/vertex"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="incoming" upperBound="-1"
eType="#//Transition" eOpposite="#//Transition/target"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="outgoing" upperBound="-1"
eType="#//Transition" eOpposite="#//Transition/source"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Pseudostate" abstract="true" eSuperTypes="#//Vertex"/>
<eClassifiers xsi:type="ecore:EClass" name="ComponentActivity">
<eStructuralFeatures xsi:type="ecore:EReference" name="actions" lowerBound="1"
upperBound="-1" eType="#//ComponentAction" containment="true" eOpposite="#//ComponentAction/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//State" eOpposite="#//State/componentActivity"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ComponentAction">
<eStructuralFeatures xsi:type="ecore:EReference" name="parent" lowerBound="1"
eType="#//ComponentActivity" eOpposite="#//ComponentActivity/actions"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="parameters" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Create" eSuperTypes="#//ComponentAction">
<eStructuralFeatures xsi:type="ecore:EReference" name="sourceComponent" lowerBound="1"
eType="#//SimpleComponentDefinition"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Delete" eSuperTypes="#//ComponentAction"/>
<eClassifiers xsi:type="ecore:EClass" name="Activate" eSuperTypes="#//ComponentAction"/>
<eClassifiers xsi:type="ecore:EClass" name="ExecuteService" eSuperTypes="#//ComponentAction">
<eStructuralFeatures xsi:type="ecore:EReference" name="serivce" lowerBound="1"
eType="#//Services"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="LaunchEvent" eSuperTypes="#//ComponentAction">
<eStructuralFeatures xsi:type="ecore:EReference" name="launchComponent" eType="#//Component"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="launchedEvent" lowerBound="1"
eType="#//Event" eOpposite="#//Event/eventLaunched"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Region">
<eStructuralFeatures xsi:type="ecore:EReference" name="smParent" lowerBound="1"
eType="#//StateMachine" eOpposite="#//StateMachine/regions"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="transitions" upperBound="-1"
eType="#//Transition" containment="true" eOpposite="#//Transition/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="vertex" lowerBound="1"
upperBound="-1" eType="#//Vertex" containment="true" eOpposite="#//Vertex/parent"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="stateParent" eType="#//State"
eOpposite="#//State/subRegions"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="currentState" lowerBound="1"
eType="#//State"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="update" lowerBound="1"
eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InitialState" eSuperTypes="#//Pseudostate"/>
<eClassifiers xsi:type="ecore:EClass" name="JoinState" eSuperTypes="#//Pseudostate"/>
<eClassifiers xsi:type="ecore:EClass" name="ForkState" eSuperTypes="#//Pseudostate"/>
<eClassifiers xsi:type="ecore:EClass" name="FinalState" eSuperTypes="#//Pseudostate"/>
<eClassifiers xsi:type="ecore:EClass" name="InteractionActivity"/>
<eClassifiers xsi:type="ecore:EClass" name="Deactivate" eSuperTypes="#//ComponentAction"/>
<eClassifiers xsi:type="ecore:EClass" name="SimpleComponentDefinition">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
</ecore:EPackage>
return to Contents
[interaction_model_example.xmi]
<?xml version="1.0" encoding="ASCII"?>
<interaction_mm:InteractionModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:interaction_mm="http://interaction_mm/1.0" xsi:schemaLocation="http://interaction_mm/1.0 ../interaction_mm.ecore" name="example_model">
<role isPlayed="//@group.0 //@group.0/@actor.0" name="Politic">
<task xsi:type="interaction_mm:CooperativeTask" name="DamageEvaluationP">
<taskUnit xsi:type="interaction_mm:TaskAction" name="InputData"/>
<taskUnit xsi:type="interaction_mm:SubTask" name="GeographicAnalysis">
<choreography id="ch_p_2">
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.0/@task.0/@taskUnit.1/@choreography/@step.1" id="step_p_2_1"/>
<step xsi:type="interaction_mm:TaskStep" controlFlow="//@role.0/@task.0/@taskUnit.1/@choreography/@step.2" id="step_p_2_2" task="//@role.1/@task.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.0/@task.0/@taskUnit.1/@choreography/@step.3" id="step_p_2_3" taskUnit="//@role.0/@task.0/@taskUnit.1/@subTaskUnit.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_p_2_4" taskUnit="//@role.0/@task.0/@taskUnit.1/@subTaskUnit.1"/>
<step xsi:type="interaction_mm:ControlStep" id="step_p_2_5" type="FinalStep"/>
</choreography>
<subTaskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.0" name="SendAnalysisData"/>
<subTaskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.1" name="ReceiveAnalysisInformation"/>
</taskUnit>
<taskUnit xsi:type="interaction_mm:SubTask" name="Evaluation">
<choreography id="ch_p_3">
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.0/@task.0/@taskUnit.2/@choreography/@step.1" id="step_p_3_1"/>
<step xsi:type="interaction_mm:TaskStep" controlFlow="//@role.0/@task.0/@taskUnit.2/@choreography/@step.2" id="step_p_3_2" task="//@role.2/@task.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.0/@task.0/@taskUnit.2/@choreography/@step.3" id="step_p_3_3" taskUnit="//@role.0/@task.0/@taskUnit.2/@subTaskUnit.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_p_3_4" taskUnit="//@role.0/@task.0/@taskUnit.2/@subTaskUnit.1"/>
<step xsi:type="interaction_mm:ControlStep" id="step_p_3_5" type="FinalStep"/>
</choreography>
<subTaskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.2 //@role.0/@task.0/@infoObject.1" name="SendEvaluationData"/>
<subTaskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.3" name="ReceiveEvaluationReport"/>
</taskUnit>
<choreography id="ch_p_1">
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.0/@task.0/@choreography/@step.1" id="step_p_1_1"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_p_1_2" taskUnit="//@role.0/@task.0/@taskUnit.0"/>
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.0/@task.0/@choreography/@step.3 //@role.0/@task.0/@choreography/@step.4" id="step_p_1_3" type="ForkStep"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_p_1_4" taskUnit="//@role.0/@task.0/@taskUnit.1"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_p_1_5" taskUnit="//@role.0/@task.0/@taskUnit.2"/>
<step xsi:type="interaction_mm:ControlStep" id="step_p_1_6" type="JoinStep"/>
<step xsi:type="interaction_mm:ControlStep" id="step_p_1_7" type="FinalStep"/>
</choreography>
<infoObject name="AnalysisData"/>
<infoObject name="AnalysisInformation"/>
<infoObject name="EvaluationData"/>
<infoObject name="EvaluationReport"/>
</task>
</role>
<role isPlayed="//@group.0/@actor.1" name="ExpertGIS">
<task xsi:type="interaction_mm:NonCooperativeTask" name="DamageEvaluationExp">
<taskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.0" name="ReceiveDataExp"/>
<taskUnit xsi:type="interaction_mm:TaskAction" name="AnalysisGIS"/>
<taskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.1" name="SendInformation"/>
<choreography id="ch_exp_1">
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.1/@task.0/@choreography/@step.1" id="step_exp_1_1"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.1/@task.0/@choreography/@step.2" id="step_exp_1_2" taskUnit="//@role.1/@task.0/@taskUnit.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.1/@task.0/@choreography/@step.3" id="step_exp_1_3" taskUnit="//@role.1/@task.0/@taskUnit.1"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_exp_1_4" taskUnit="//@role.1/@task.0/@taskUnit.2"/>
<step xsi:type="interaction_mm:ControlStep" id="step_exp_1_5" type="FinalStep"/>
</choreography>
</task>
</role>
<role isPlayed="//@group.0/@actor.2" name="Evaluator">
<task xsi:type="interaction_mm:NonCooperativeTask" name="DamageEvaluationEv">
<taskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.2" name="ReceiveDataEv"/>
<taskUnit xsi:type="interaction_mm:TaskAction" name="Evaluation"/>
<taskUnit xsi:type="interaction_mm:TaskAction" objectFlow="//@role.0/@task.0/@infoObject.3" name="SendReport"/>
<choreography id="ch_ev_1">
<step xsi:type="interaction_mm:ControlStep" controlFlow="//@role.2/@task.0/@choreography/@step.1" id="step_ev_1_1"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.2/@task.0/@choreography/@step.2" id="step_ev_1_2" taskUnit="//@role.2/@task.0/@taskUnit.0"/>
<step xsi:type="interaction_mm:TaskUnitStep" controlFlow="//@role.2/@task.0/@choreography/@step.3" id="step_ev_1_3" taskUnit="//@role.2/@task.0/@taskUnit.1"/>
<step xsi:type="interaction_mm:TaskUnitStep" id="step_ev_1_4" taskUnit="//@role.2/@task.0/@taskUnit.2"/>
<step xsi:type="interaction_mm:ControlStep" id="step_ev_1_5" type="FinalStep"/>
</choreography>
</task>
</role>
<group plays="//@role.0" name="Politic1" id="Group1">
<actor plays="//@role.0" name="Politic1"/>
<actor plays="//@role.1" name="ExpertGIS1"/>
<actor plays="//@role.2" name="Evaluator1"/>
</group>
</interaction_mm:InteractionModel>
This figure shows an instance of the
structure metamodel for the example. Then, model shows the three
user interfaces for the three actors in the example, one for the
politician, another for the GIS expert and another for the evaluator.
The diagram shows the internal dependencies between components in each
user interface and also between interface components. A UML component
diagram was used to draw the model of the instance in the gure, using
a graphical notation for the "capsule/port/connector" model.
As a result of the modelling process, we
have obtained the following architecture model:
<subComponents xsi:type="architecture_metamodel:ComplexComponent" name="Politician_GUI">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.0" name="out_politicianGui"/>
<ports xsi:type="architecture_metamodel:Required" port_interface="//@interfaces.1" name="in_politicianGui_expertGui"/>
<ports xsi:type="architecture_metamodel:Required" port_interface="//@interfaces.2" name="in_politicianGui_evaluatorGui"/>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="ReportManager" definition="//@definitions.0">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.4" name="out_reportManager"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="DataManager" definition="//@definitions.1">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.5" name="out_dataManager"/>
</subComponents>
</subComponents>
<subComponents xsi:type="architecture_metamodel:ComplexComponent" name="ExpertGIS_GUI">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.1" name="out_expertGui"/>
<subComponents xsi:type="architecture_metamodel:ComplexComponent" name="ImageVisualization">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.6" name="out_imageVisualization"/>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="Map" definition="//@definitions.2">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.7" name="out_map"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="Histogram" definition="//@definitions.3">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.8" name="out_hist"/>
<ports xsi:type="architecture_metamodel:Required" port_interface="//@interfaces.7" name="in_hist_map"/>
</subComponents>
<connectors source="//@subComponents.1/@subComponents.0/@subComponents.0/@ports.0" target="//@subComponents.1/@subComponents.0/@subComponents.1/@ports.1" name="map_hist"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="ReportCreator" definition="//@definitions.4">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.9" name="out_reportCreator"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="Chat" definition="//@definitions.5">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.10" name="out_chat"/>
</subComponents>
</subComponents>
<subComponents xsi:type="architecture_metamodel:ComplexComponent" name="Evaluator_GUI">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.2" name="out_evaluatorGui"/>
<subComponents xsi:type="architecture_metamodel:ComplexComponent" name="DamageEvaluator">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.11" name="out_damageEvaluator"/>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="EconomicAssessor" definition="//@definitions.6">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.12" name="out_economicAssessor"/>
<ports xsi:type="architecture_metamodel:Required" port_interface="//@interfaces.13" name="in_economicAssessor_dataConversor"/>
<ports xsi:type="architecture_metamodel:Required" port_interface="//@interfaces.14" name="in_economicAssessor_calculator"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="DataConversor" definition="//@definitions.7">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.13" name="out_dataConversor"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="Calculator" definition="//@definitions.8">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.14" name="out_calculator"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="ReportCreator" definition="//@definitions.4">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.9" name="out_reportCreator"/>
</subComponents>
<subComponents xsi:type="architecture_metamodel:SimpleComponent" name="Chat" definition="//@definitions.5">
<ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.10" name="out_chat"/>
</subComponents>
</subComponents>
<connectors source="//@subComponents.1/@ports.0" target="//@subComponents.0/@ports.1" name="expertGui_politicianGui"/>
<connectors source="//@subComponents.2/@ports.0" target="//@subComponents.0/@ports.2" name="evaluatorGui_politicianGui"/>
<interfaces name="R_DmgEvPolitician">
<services name="R_DmgEvPolitician"/>
</interfaces>
<interfaces name="R_DmgEvExpertGIS">
<services name="R_DmgEvExpertGIS"/>
</interfaces>
<interfaces name="R_DmgEvEvaluator">
<services name="R_DmgEvEvaluator"/>
</interfaces>
<interfaces name="R_AM">
<services name="R_AM"/>
</interfaces>
<interfaces name="R_ReportM">
<services name="R_ReportM"/>
</interfaces>
<interfaces name="R_DataM">
<services name="R_DataM"/>
</interfaces>
<interfaces name="R_ImgVis">
<services name="R_ImgVis"/>
</interfaces>
<interfaces name="R_Map">
<services name="R_Map"/>
</interfaces>
<interfaces name="R_Hist">
<services name="R_Hist"/>
</interfaces>
<interfaces name="R_ReportC">
<services name="R_ReportC"/>
</interfaces>
<interfaces name="R_Chat">
<services name="R_Chat"/>
</interfaces>
<interfaces name="R_DmgEv">
<services name="R_DmgEv"/>
</interfaces>
<interfaces name="R_EconomicAssess">
<services name="R_EconomicAssess"/>
</interfaces>
<interfaces name="R_DataConv">
<services name="R_DataConv"/>
</interfaces>
<interfaces name="R_Calc">
<services name="R_Calc"/>
</interfaces>
<definitions name="ReportManager"/>
<definitions name="DataManager"/>
<definitions name="Map"/>
<definitions name="Histogram"/>
<definitions name="ReportCreator"/>
<definitions name="Chat"/>
<definitions name="EconomicAssessor"/>
<definitions name="DataConversor"/>
<definitions name="Calculator"/>
</architecture_metamodel:ArchitectureModel>