/* Core section of the domain * * @author Pedro Santos (pedro.miguel.santos@ist.utl.pt) * @version $Id$ */ /////////////////////////////////////////////////////////////////////////////// // Core Section package pt.utl.ist.paws.domain; enum IterationType; enum WorkItemType; enum WorkItemSubType; class Person { String username (REQUIRED); String password (REQUIRED); String name (REQUIRED); String email; } class Role { String name (REQUIRED); } relation PersonRoles { Person playsRole person { multiplicity *; } Role playsRole role; } class WorkDefinition { String name (REQUIRED); String description; Date creation (REQUIRED); Date lastChange (REQUIRED); } relation WorkDefinitionOwnership { WorkDefinition playsRole owned { multiplicity *; } Person playsRole owner; } class Comment { String text (REQUIRED); Date publication (REQUIRED); } class CommentReply extends Comment; relation CommentedWorkDefinitions { WorkDefinition playsRole commented; Comment playsRole comment { multiplicity *; } } relation CommentReplies { Comment playsRole replied; CommentReply playsRole reply { multiplicity *; } } relation PersonComments { Person playsRole writer; Comment playsRole comment { multiplicity *; } } class Project extends WorkDefinition { //Interval interval (REQUIRED); } class Team extends WorkDefinition; class Iteration extends WorkDefinition { //Interval interval (REQUIRED); IterationType type (REQUIRED); } class WorkItem extends WorkDefinition { WorkItemType type; WorkItemSubType subType; } class Theme extends WorkDefinition; relation ProjectTeams { Project playsRole project; Team playsRole team { multiplicity *; } } relation TeamMembers { Team playsRole team; Person playsRole member { multiplicity *; } } relation TeamIterations { Team playsRole team; Iteration playsRole iteration { multiplicity *; } } relation IterationComposite { Iteration playsRole parent; Iteration playsRole child { multiplicity *; } } relation ProjectWorkItems { Project playsRole project; WorkItem playsRole workItem { multiplicity *; } } relation ProjectThemes { Project playsRole project; Theme playsRole theme { multiplicity *; } } /////////////////////////////////////////////////////////////////////////////// // Properties Section package pt.utl.ist.paws.domain.properties; enum Priority; enum Value; enum Risk; class MetaProperty { String name; String clazz; } class Property; relation PropertyMetaInfo { MetaProperty playsRole meta; Property playsRole property { multiplicity *; } } class StringProperty extends Property { String value; } class DateProperty extends Property { Date value; } class PriorityProperty extends Property { Priority value; } class ValueProperty extends Property { Value value; } class RiskProperty extends Property { Risk value; } class ThemeProperty extends Property; package pt.utl.ist.paws.domain; relation ProjectMetaProperties { Project playsRole project; properties.MetaProperty playsRole metaProperty { multiplicity *; } } relation WorkDefinitionProperties { WorkDefinition playsRole workDefinition; properties.Property playsRole property { multiplicity *; } } relation ThemePropertyValue { properties.ThemeProperty playsRole themeProperty; Theme playsRole theme; } /////////////////////////////////////////////////////////////////////////////// // Plan Section package pt.utl.ist.paws.domain.plan; class Plan { Date instant; Long period; } class Dependency { Date instant; } class Composition extends Dependency; class Precedence extends Dependency; class Assignment { Date instant; } package pt.utl.ist.paws.domain; relation PlanWorkItem { WorkItem playsRole workItem; plan.Plan playsRole plan { multiplicity *; } } relation DependencySource { WorkItem playsRole dependencySource; plan.Dependency playsRole dependency { multiplicity *; } } relation CompositionChildren { WorkItem playsRole child { multiplicity *; } plan.Composition playsRole childOf { multiplicity *; } } relation PrecedenceBefores { WorkItem playsRole before { multiplicity *; } plan.Precedence playsRole beforeOf { multiplicity *; } } relation IterationPlan { Iteration playsRole iteration; plan.Plan playsRole plan { multiplicity *; } } relation IterationDependencies { Iteration playsRole iteration; plan.Dependency playsRole dependency { multiplicity *; } } relation PersonPlans { Person playsRole planner; plan.Plan playsRole plan { multiplicity *; } } relation PersonDependencies { Person playsRole writer; plan.Dependency playsRole dependency { multiplicity *; } } relation PersonAssigner { Person playsRole assigner; plan.Assignment playsRole createdAssignment { multiplicity *; } } relation Assignments { Person playsRole assignee { multiplicity *; } plan.Assignment playsRole assignment { multiplicity *; } } /////////////////////////////////////////////////////////////////////////////// // Execution Section package pt.utl.ist.paws.domain.execution; class Activity { Date day; Long duration; } package pt.utl.ist.paws.domain; relation WorkItemActivities { WorkItem playsRole workItem; execution.Activity playsRole activity { multiplicity *; } } relation IterationActivities { Iteration playsRole iteration; execution.Activity playsRole activity { multiplicity *; } } relation PersonActivities { Person playsRole developer; execution.Activity playsRole activity { multiplicity *; } }