/* Core section of the domain * * @author Pedro Santos (pedro.miguel.santos@ist.utl.pt) * @version $Id: domain.dml,v 1.26 2008-05-09 15:36:12 pmrsa Exp $ */ valueType pt.utl.ist.paws.core.Priority as Priority; valueType pt.utl.ist.paws.core.State as State; valueType java.lang.Object as Object; class net.sourceforge.fenixedu.domain.DomainObject { } class net.sourceforge.fenixedu.domain.RootDomainObject extends net.sourceforge.fenixedu.domain.DomainObject { } class pt.utl.ist.paws.core.WorkDefinition extends net.sourceforge.fenixedu.domain.DomainObject { String name (REQUIRED); String description; Date creation; Date modification; } class pt.utl.ist.paws.core.Comment extends net.sourceforge.fenixedu.domain.DomainObject { String text (REQUIRED); Date date (REQUIRED); } class pt.utl.ist.paws.core.Person extends net.sourceforge.fenixedu.domain.DomainObject { String username (REQUIRED); String password (REQUIRED); String name (REQUIRED); String email (REQUIRED); } class pt.utl.ist.paws.core.PawsRole extends net.sourceforge.fenixedu.domain.DomainObject { String name (REQUIRED); } class pt.utl.ist.paws.core.Project extends pt.utl.ist.paws.core.WorkDefinition { Date start (REQUIRED); Double memberWork; } class pt.utl.ist.paws.core.Team extends pt.utl.ist.paws.core.WorkDefinition { } class pt.utl.ist.paws.core.Iteration extends pt.utl.ist.paws.core.WorkDefinition { Date start (REQUIRED); Date end (REQUIRED); State state (REQUIRED); Integer velocityEstimate; Integer velocity; } class pt.utl.ist.paws.core.IterationComposite extends pt.utl.ist.paws.core.Iteration { } class pt.utl.ist.paws.core.IterationAtom extends pt.utl.ist.paws.core.Iteration { } class pt.utl.ist.paws.core.WorkItem extends pt.utl.ist.paws.core.WorkDefinition { Priority priority (REQUIRED); State state (REQUIRED); Integer estimate; } class pt.utl.ist.paws.core.WorkItemComposite extends pt.utl.ist.paws.core.WorkItem { } class pt.utl.ist.paws.core.WorkItemAtom extends pt.utl.ist.paws.core.WorkItem { Date scheduled; Date due; Date completed; } class pt.utl.ist.paws.core.DevelopmentEpisode extends net.sourceforge.fenixedu.domain.DomainObject { Date start (REQUIRED); Date end; } class pt.utl.ist.paws.core.DevelopmentDay extends net.sourceforge.fenixedu.domain.DomainObject { Date day (REQUIRED); Long time (REQUIRED); String type; } class pt.utl.ist.paws.core.Snapshot extends net.sourceforge.fenixedu.domain.DomainObject { Date day (REQUIRED); Integer estimate (REQUIRED); State state (REQUIRED); Date completed; } class pt.utl.ist.paws.core.WorkAssignment extends net.sourceforge.fenixedu.domain.DomainObject { Integer weight; } relation PersonOwnedWorkDefinitions { pt.utl.ist.paws.core.WorkDefinition playsRole owned { multiplicity *; } pt.utl.ist.paws.core.Person playsRole owner { multiplicity 1; } } relation PersonRoles { pt.utl.ist.paws.core.Person playsRole person { multiplicity *; } pt.utl.ist.paws.core.PawsRole playsRole role { multiplicity *; } } relation WorkDefinitionComments { pt.utl.ist.paws.core.Comment playsRole comment { multiplicity *; } pt.utl.ist.paws.core.WorkDefinition playsRole commented { multiplicity 1; } } relation CommentReplies { pt.utl.ist.paws.core.Comment playsRole reply { multiplicity *; } pt.utl.ist.paws.core.Comment playsRole replied { multiplicity 1; } } relation PersonComments { pt.utl.ist.paws.core.Comment playsRole comment { multiplicity *; } pt.utl.ist.paws.core.Person playsRole writer { multiplicity 1; } } relation ProjectTeams { pt.utl.ist.paws.core.Team playsRole team { multiplicity *; } pt.utl.ist.paws.core.Project playsRole project { multiplicity 1; } } relation TeamMembers { pt.utl.ist.paws.core.Person playsRole member { multiplicity *; } pt.utl.ist.paws.core.Team playsRole team { multiplicity *; } } relation ProjectWorkItems { pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity *; } pt.utl.ist.paws.core.Project playsRole project { multiplicity 1; } } relation TeamIterations { pt.utl.ist.paws.core.Iteration playsRole iteration { multiplicity *; } pt.utl.ist.paws.core.Team playsRole team { multiplicity 1; } } relation IterationCompositeChildren { pt.utl.ist.paws.core.Iteration playsRole child { multiplicity *; } pt.utl.ist.paws.core.IterationComposite playsRole parent { multiplicity 1; } } relation WorkItemCompositeChildren { pt.utl.ist.paws.core.WorkItem playsRole child { multiplicity *; } pt.utl.ist.paws.core.WorkItemComposite playsRole parent { multiplicity 1; } } relation IterationWorkItems { pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity *; } pt.utl.ist.paws.core.Iteration playsRole iteration { multiplicity 1; } } relation WorkItemAssignments { pt.utl.ist.paws.core.WorkAssignment playsRole part { multiplicity *; } pt.utl.ist.paws.core.WorkItemAtom playsRole workItem { multiplicity 1; } } relation PersonAssignedWorkItems { pt.utl.ist.paws.core.WorkAssignment playsRole part { multiplicity *; } pt.utl.ist.paws.core.Person playsRole performer { multiplicity 1; } } relation WorkItemDevelopmentEpisodes { pt.utl.ist.paws.core.DevelopmentEpisode playsRole episode { multiplicity *; } pt.utl.ist.paws.core.WorkItemAtom playsRole workItem { multiplicity 1; } } relation PersonExecutedDevelopmentEpisodes { pt.utl.ist.paws.core.DevelopmentEpisode playsRole episode { multiplicity *; } pt.utl.ist.paws.core.Person playsRole executor { multiplicity 1; } } relation WorkItemDevelopmentDays { pt.utl.ist.paws.core.DevelopmentDay playsRole workDay { multiplicity *; } pt.utl.ist.paws.core.WorkItemAtom playsRole workItem { multiplicity 1; } } relation PersonExecutedDevelopmentDays { pt.utl.ist.paws.core.DevelopmentDay playsRole workDay { multiplicity *; } pt.utl.ist.paws.core.Person playsRole executor { multiplicity 1; } } relation WorkItemSnapshots { pt.utl.ist.paws.core.Snapshot playsRole snapshot { multiplicity *; } pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity 1; } } // Root Domain Object Links relation PersonRootDomainObject { pt.utl.ist.paws.core.Person playsRole person { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } relation RolesRootDomainObject { pt.utl.ist.paws.core.PawsRole playsRole role { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } relation ProjectRootDomainObject { pt.utl.ist.paws.core.Project playsRole project { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } relation WorkItenRootDomainObject { pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } /* XP section of the domain * * @author Pedro Santos (pedro.miguel.santos@ist.utl.pt) * @version $Id: domain.dml,v 1.26 2008-05-09 15:36:12 pmrsa Exp $ */ valueType pt.utl.ist.paws.xp.Value as Value; valueType pt.utl.ist.paws.xp.Risk as Risk; class pt.utl.ist.paws.xp.XPProject extends pt.utl.ist.paws.core.Project { Integer releasePeriod; // in days Integer iterationPeriod; // in days } class pt.utl.ist.paws.xp.XPPerson extends pt.utl.ist.paws.core.Person { } class pt.utl.ist.paws.xp.XPRelease extends pt.utl.ist.paws.core.IterationComposite { } class pt.utl.ist.paws.xp.XPIteration extends pt.utl.ist.paws.core.IterationAtom { } class pt.utl.ist.paws.xp.XPStory extends pt.utl.ist.paws.core.WorkItemComposite { Value value; Risk risk; } class pt.utl.ist.paws.xp.XPTask extends pt.utl.ist.paws.core.WorkItemAtom { } class pt.utl.ist.paws.xp.XPTheme extends net.sourceforge.fenixedu.domain.DomainObject { String name; String description; } class pt.utl.ist.paws.xp.XPStoryType extends net.sourceforge.fenixedu.domain.DomainObject { String name; String description; } class pt.utl.ist.paws.xp.XPTaskType extends net.sourceforge.fenixedu.domain.DomainObject { String name; String description; } relation ResourceClient { pt.utl.ist.paws.xp.XPStory playsRole clientStory { multiplicity *; } pt.utl.ist.paws.xp.XPPerson playsRole client { multiplicity 1; } } relation ProjectThemes { pt.utl.ist.paws.xp.XPTheme playsRole theme { multiplicity *; } pt.utl.ist.paws.xp.XPProject playsRole project { multiplicity 1; } } relation StoryTheme { pt.utl.ist.paws.xp.XPStory playsRole story { multiplicity *; } pt.utl.ist.paws.xp.XPTheme playsRole theme { multiplicity 1; } } relation StoryType { pt.utl.ist.paws.xp.XPStory playsRole story { multiplicity *; } pt.utl.ist.paws.xp.XPStoryType playsRole type { multiplicity 1; } } relation TaskType { pt.utl.ist.paws.xp.XPTask playsRole task { multiplicity *; } pt.utl.ist.paws.xp.XPTaskType playsRole type { multiplicity 1; } } // RootDomainObject Links relation StoryTypes { pt.utl.ist.paws.xp.XPStoryType playsRole storyType { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } relation TaskTypes { pt.utl.ist.paws.xp.XPTaskType playsRole taskType { multiplicity *; } net.sourceforge.fenixedu.domain.RootDomainObject playsRole rootDomainObject { multiplicity 1; } } // LOG SECTION class pt.utl.ist.paws.log.Log extends net.sourceforge.fenixedu.domain.DomainObject { Date date; } class pt.utl.ist.paws.log.EstimateLog extends pt.utl.ist.paws.log.Log { Integer oldValue; Integer newValue; } class pt.utl.ist.paws.log.ReplanningLog extends pt.utl.ist.paws.log.Log { } relation LogPerson { pt.utl.ist.paws.log.Log playsRole log { multiplicity *; } pt.utl.ist.paws.core.Person playsRole person { multiplicity 1; } } relation EstimateLogWorkItem { pt.utl.ist.paws.log.EstimateLog playsRole estimateLog { multiplicity *; } pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity 1; } } relation ReplanningLogWorkItem { pt.utl.ist.paws.log.ReplanningLog playsRole replanningLog { multiplicity *; } pt.utl.ist.paws.core.WorkItem playsRole workItem { multiplicity 1; } } relation ReplanningLogOldIteration { pt.utl.ist.paws.log.ReplanningLog playsRole replanningLogAsOld { multiplicity *; } pt.utl.ist.paws.core.Iteration playsRole oldIteration { multiplicity 1; } } relation ReplanningLogNewIteration { pt.utl.ist.paws.log.ReplanningLog playsRole replanningLogAsNew { multiplicity *; } pt.utl.ist.paws.core.Iteration playsRole newIteration { multiplicity 1; } }