In Web-based Cooperative Information Systems (WCIS), user groups with di erent 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.


Contents

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

User interfaces are treated like a set of models. A model is an instance of a meta-model, which sets the rules and elements describing the system. Our system is built on the basis of two meta-models showed in the figure:



The Architecture Metamodel defi nes the component architecture by describing component structure and behavior. This meta-model is divided into three subsets: the structure meta-model, the visual meta-model and the interaction meta-model. The fi rst one models composition dependencies between components through connection ports (i.e., provided and required interfaces). The visual meta-model models visual component behavior by means of a state machine. The interaction meta-model models user-interaction behavior and describes the structure of interaction tasks that users may execute in the system.

return to Contents

 

2. Simple running example

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).

2.1. User interfaces

Three users with three diff erent roles take part in this task, a politician, a GIS expert, and an Evaluator. An example of the three user interfaces handled by each of the three actors is shown in the next figure:


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.

return to Contents

 2.2. User interaction sequence diagram

A sequence diagram basis on the interaction between users and between them and the user interface components is shown in the figure:



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 a fected 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 a ected soil, damaged infraestructure, etc. based on the information provided by the expert.
    4º.- Finally, the politician makes his fi nal report based on the information prepared and coordinated in the cooperative process described above.

return to Contents

 

3. Architecture meta-model

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

3.1. Interaction subset

Next figure shows a diagram describing the relationships between users as well as their activities for cooperative task execution. The fi gure shows an instance (or model) of the interaction metamodel as a guiding example. To draw the model we have used a representation adapted from the UML activities diagram. To help read it, each symbol has been stereotyped with the corresponding concept (element) in the meta-model.



As a result of the modelling process, we have obtained the following interaction model:

[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>

 


return to Contents

3.2. Structural subset

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:

[architecture_model_example.xmi]

<?xml version="1.0" encoding="ASCII"?>
<architecture_metamodel:ArchitectureModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:architecture_metamodel="http://architecture_metamodel/1.0" xsi:schemaLocation="http://architecture_metamodel/1.0 architecture_metamodel.ecore" name="ExampleModel">
  <ports xsi:type="architecture_metamodel:Provided" port_interface="//@interfaces.3" name="out_am"/>
  <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>
      <connectors source="//@subComponents.2/@subComponents.0/@subComponents.1/@ports.0" target="//@subComponents.2/@subComponents.0/@subComponents.0/@ports.1" name="dataConversor_economicAssessor"/>
      <connectors source="//@subComponents.2/@subComponents.0/@subComponents.2/@ports.0" target="//@subComponents.2/@subComponents.0/@subComponents.0/@ports.2" name="calculator_economicAssessor"/>
    </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>


return to Contents