123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- include "primitives.alh"
- include "object_operations.alh"
- include "modelling.alh"
- SimpleAttribute Neutral {}
- SimpleAttribute Boolean {
- constraint = $
- String function constraint(model: Element, id: String):
- if (bool_not(is_physical_boolean(model["model"][id]))):
- return "Boolean has no boolean value at " + id!
- else:
- return "OK"!
- $
- }
- SimpleAttribute String {
- constraint = $
- String function constraint(model: Element, id: String):
- if (bool_not(is_physical_string(model["model"][id]))):
- return "String has no string value at " + id!
- else:
- return "OK"!
- $
- }
- SimpleAttribute Natural {
- constraint =$
- String function constraint(model: Element, id: String):
- if (bool_not(is_physical_int(model["model"][id]))):
- return "Natural has no integer value at " + id!
- elif (integer_lt(model["model"][id], 0)):
- return "Natural does not have a positive or zero value at " + id!
- else:
- return "OK"!
- $
- }
- SimpleAttribute PositiveFloat {
- constraint =$
- String function constraint(model: Element, id: String):
- if (bool_not(is_physical_float(model["model"][id]))):
- return "PositiveFloat has no float value at " + id!
- elif (integer_lt(model["model"][id], 0)):
- return "PositiveFloat does not have a positive or zero value at " + id!
- else:
- return "OK"!
- $
- }
- SimpleAttribute EventScope {
- constraint =$
- String function constraint(model: Element, id: String):
- String self
- self = model["model"][id]
- if (bool_not(is_physical_string(self))):
- return "EventScope has no string value at " + id!
- elif (bool_or(bool_or(bool_or(self != "broad", self != "cd"), bool_or(self != "narrow", self != "output")), self != 'local')):
- return "EventScope can be either 'local', 'broad', 'cd', 'narrow' or 'output' and it does not have a proper value at " + id!
- else:
- return "OK"!
- $
- }
- Class Diagram{
- name : String
- author ?: String
- description ?: String
- top ?: String
- class_reference_items ?: String
- lower_cardinality = 1
- upper_cardinality = 1
- }
- Class Inport{
- name: String
- }
- Class Outport{
- name: String
- }
- Association diagram_inports(Diagram, Inport){}
- Association diagram_outports(Diagram, Outport){}
- Class Class{
- name : String
- constructor_body ?: String
- destructor ?: String
- default ?: Boolean
- external ?: Boolean
- class_behaviour_items ?: String
- }
- Association diagram_classes(Diagram, Class){
- target_lower_cardinality = 1
- }
- Class Attribute{
- name : String
- type ?: String
- }
- Association class_attributes(Class, Attribute){}
- Class Method{
- name : String
- body : String
- return_type ?: String
- }
- Class FormalParameter{
- name: String
- type ?: String
- default ?: String
- }
- Association method_parameters(Method, FormalParameter){}
- Association class_methods(Class, Method){}
- Association class_constructor_parameters(Class, FormalParameter){}
- Class CanvasPosition{
- x1: Natural
- y1: Natural
- x2 ?: Natural
- y2 ?: Natural
- }
- Association class_ref_position(Class, CanvasPosition){
- target_upper_cardinality = 1
- }
- Association class_beh_position(Class, CanvasPosition){
- target_upper_cardinality = 1
- }
- Association association(Class, Class){
- name : String
- min ?: Natural
- max ?: Natural
- source_upper_cardinality = 1
- }
- Association association_positions(association, CanvasPosition){
- order: Natural
- }
- Association inheritance(Class, Class){
- priority ?: Natural
- source_upper_cardinality = 1
- }
- Class SuperClassConstructorParameter{
- value : Neutral
- }
- Association inheritance_parent_constructor_parameters(inheritance, SuperClassConstructorParameter){
- order : Natural
- }
- Association inheritance_positions(inheritance, CanvasPosition){
- order: Natural
- }
- Class State{
- name : String
- state_reference_path ?: String
- }
- Association state_position(State, CanvasPosition){
- target_upper_cardinality = 1
- }
- Class BasicState : State{
- isInitial : Boolean
- onEntryScript ?: String
- onExitScript ?: String
- }
- Class ActualParameter{
- exp: String
- }
- Class Raise{
- event: String
- scope ?: EventScope
- port ?: String
- target ?: String
- }
- Association raise_parameters(Raise, ActualParameter){
- order : Natural
- }
- Association state_onentry_raises(BasicState, Raise){
- order : Natural
- }
- Association state_onexit_raises(BasicState, Raise){
- order : Natural
- }
- Class CompositeState : BasicState{}
- Association composite_children(CompositeState, State){
- source_upper_cardinality = 1
- }
- Association behaviour(Class, CompositeState){
- target_lower_cardinality = 1
- target_upper_cardinality = 1
- }
- Association behaviour_positions(behaviour, CanvasPosition){
- order: Natural
- }
- Class ParallelState : BasicState{}
- Association parallel_children(ParallelState, CompositeState){
- source_upper_cardinality = 1
- }
- Class HistoryState : State{
- type : String
- }
- Association transition(State, State){
- name: String
- cond ?: String
- script ?: String
- after ?: PositiveFloat
- event ?: String
- port ?: String
- source_upper_cardinality = 1
- }
- Association transition_parameters(transition, FormalParameter){
- order : Natural
- }
- Association transition_raises(transition, Raise){
- order : Natural
- }
- Association transition_positions(transition, CanvasPosition){
- order: Natural
- }
- GlobalConstraint {
- global_constraint = $
- String function constraint(model : Element):
- Element composite_states
- Element parallel_states
- Element children
- String state
- String child
- String name
- Boolean CompInitialFound
- Element encountered_names
- composite_states = allInstances(model, "CompositeState")
- parallel_states = allInstances(model, "ParallelState")
- while (list_len(composite_states) >0):
- CompInitialFound = False
- encountered_names = create_node()
- state = set_pop(composite_states)
- children = allAssociationDestinations(model, state, "composite_children")
- while (list_len(children)>0):
- child = set_pop(children)
- name = read_attribute(model, child, 'name')
- if (set_in(encountered_names, name)):
- return "Unique state identifier names on the same level/parent violated"!
- else:
- set_add(encountered_names, name)
- if bool_and(read_type(model, child) != 'HistoryState' , read_attribute(model, child, 'isInitial')):
- CompInitialFound = True
- if CompInitialFound == False:
- return "Composite state does not have an initial child state"!
- while (list_len(parallel_states) >0):
- encountered_names = create_node()
- state = set_pop(parallel_states)
- children = allAssociationDestinations(model, state, "parallel_children")
- while (list_len(children)>0):
- child = set_pop(children)
- name = read_attribute(model, child, 'name')
- if (set_in(encountered_names, name)):
- return "Unique state identifier names on the same level/parent violated"!
- else:
- set_add(encountered_names, name)
- return "OK"!
- $
- }
|