model metamodel enum RelationType{Replace, Eliminate, Combine} enum RoleRelationType {Change, Eliminate, Add} enum ProcessType {Proposed, Current, Integrated} enum IntegrationRelationType { S, TS, DS, D, C, N, A } enum DecompositionType {AND, OR, XOR} enum GMType{Input, SIGM, DIGM, IGM} class PGModel attributes name : String id : Integer end class Stakeholder attributes name : String id : Integer importance : Integer type : String end class Constraint attributes name : String id : Integer description : String expression : String end class Criteria attributes id : Integer name : String description : String expression : String value : Integer end class MF < Criteria end class UA < Criteria end class UN < Criteria end class LTV < Criteria end ---------------------------------------------- GoalModel--------------------------- class GoalModel attributes name : String id : Integer Type: GMType end class Goal attributes id : Integer name : String importance : Integer description : String satisfactionLevel : Integer end class Indicator < Goal attributes targetValue : Integer worstValue : Integer currentValue : Integer threshold : Integer unit : String end class Link attributes id : Integer name : String description : String end class IntegrationRelation attributes id : Integer type : IntegrationRelationType end --class Contribution < Link --attributes -- Contvalue: Integer --end class Decomposition < Link attributes DecompType: DecompositionType end ---------------------------------------------------------------------------------- class Concern attributes id : Integer name : String description : String end class ProcessModel attributes id : Integer name : String end class Process attributes id : Integer name : String type: ProcessType description : String end class Activity attributes id : Integer name : String description : String condition : String end class Contribution attributes id : Integer quantitaveContribution : Integer end class Change attributes id : Integer value : Integer unit : String end class ActivityRoleRelation attributes id : Integer relationtype: RoleRelationType end class ActivityRelation attributes id : Integer relationtype: RelationType end association PGModel__ProcessModel between PGModel[1] ProcessModel[*] end association PGModel__Stakeholder between PGModel[1] Stakeholder[*] end association GoalModel__PGModel between PGModel[1] GoalModel[*] end association Concern__PGModel between PGModel[1] Concern[*] end ----------------------------Goal------------------------- --association Goal__Stakeholder between -- Stakeholder[*] -- Goal[*] --end association ___ between Goal [1] role source Link [*] role to end association __ between Link [*] role fromm Goal [*] role destination end association intiates between Goal[0 .. 1] role source IntegrationRelation[*] role integrationrelation end association receives between Goal[0 .. 1] role destination IntegrationRelation[*] role relation end association integration between GoalModel[0 .. 1] role current GoalModel[*] role merged end association _intiates between Link[0 .. 1] role LinkSource IntegrationRelation[*] role intiates end association _linkedTo between Link[0 .. 1] role LinkDestination IntegrationRelation[1 .. *] role relation end association Stakeholder__GoalModel between Stakeholder[*] GoalModel[*] end association Goal__GoalModel between Goal[*] GoalModel[*] end association Goal__Stakeholder between Goal[*] Stakeholder[0..1] end association Link__GoalModel between Link[*] GoalModel[*] end association __intiates between Stakeholder[0 .. 1] role stakeholderSource IntegrationRelation[*] role intiates end association __receives between Stakeholder[0 .. 1] role stakeholderDestination IntegrationRelation[*] role relation end ------------------------------------------------------------- association Criteria__Goal between Criteria[1] role measured Goal[*] role measure end association Process__Stakeholder between Stakeholder[*] Process[*] end association __LinkedToRole between ActivityRoleRelation[0 .. 1] Stakeholder[0 .. 1] end association Constraint__Process between Constraint[*] Process[*] end association Concern__Criteria between Criteria[*] Concern[*] end association Criteria__Criteria between Criteria[1] role main Criteria[*] role partOf end --association Goal__GoalModel between -- GoalModel[1] -- Goal[*] --end association contributes between Goal[0 .. 1] role parent Goal[*] role child end --Needs OCL --association parent__subgoals between --Goal[0 .. 1] --Goal[*] --end association ToGoal__intiates between Goal[1] Contribution[*] end association Concern__Goal between Concern[*] Goal[*] end association __changes between Indicator[0 .. 1] Change[0 .. 1] end association relation between Concern[1] role corespondsTo Process[*] role belongsTo end --Needs OCL --association __correspondsTo between -- Concern[*] -- Process[*] --end association parent_subconcern between Concern[0 .. 1] role parent Concern[*] role child end association __PbelongsTo between ProcessModel[1] Process[*] end association parent__subprocess between Process[*] role parent Process[*] role child end association hasOrIntegrate__newOrcurrent between Process[*] role belongsTo Activity[*] role newCurrent end association ToActivity__intiates between Activity[1] Contribution[*] end association __brings between Activity[0 .. 1] Change[*] end association __activityRole between Activity[0 .. 1] ActivityRoleRelation[*] end --association __starts between -- Activity[0 .. 1] -- ActivityRoleRelation[*] --end association activityRelation between Activity[0 .. 2] role linkedTo ActivityRelation[*] role fires end --Needs OCL --association __linkedTo between --ActivityRelation[0 .. 1] --Activity[0 .. 1] --end constraints context Activity inv CurrentOrProposedActivityInIntegratedProcess: --self.has -> select(p : Process | p.type = ProcessType::Integrated )->size() >= 1 --or --self.has -> select(p : Process | p.parent.type = ProcessType::Integrated )->size() >= 1 --self.belongsTo -> select(p : Process | p.closure(parent).type) -> includes(ProcessType::Integrated) self.belongsTo.closure(parent).type -> includes(ProcessType::Integrated) context Goal inv GoalCoverage: goalModel -> select(c : GoalModel | c.Type = GMType::IGM )->size() >= 1 context Goal inv GoalRelation: self.integrationrelation.destination.relation->size() >= 1 implies integrationrelation->select(c : IntegrationRelation | c.type = IntegrationRelationType::A )->size() >= 1 context Stakeholder inv StakeholderCoverage: self.intiates.stakeholderDestination.relation->size() >= 1 implies intiates->select(c : IntegrationRelation | c.type = IntegrationRelationType::A )->size() >= 1 context Link inv LinkCoverage: self.intiates.LinkDestination.relation->size() >= 1 implies intiates->select(c : IntegrationRelation | c.type = IntegrationRelationType::A )->size() >= 1 --GoalToLink context Goal inv GoalLinkIntegrationRelation: self.integrationrelation.LinkDestination.relation->size() >= 1 implies integrationrelation->select(c : IntegrationRelation | c.type = IntegrationRelationType::A )->size() >= 1 --GoalToStakeholder context Goal inv GoalLStakeholderIntegrationRelation: self.integrationrelation.stakeholderDestination.relation->size() >= 1 implies integrationrelation->select(c : IntegrationRelation | c.type = IntegrationRelationType::A )->size() >= 1