/* Copyright 2008 Google Inc.

 This work is licensed under a Creative Commons Attribution 2.5 License.
 For information, see:
   http://creativecommons.org/licenses/by/2.5/

 For the actual license text, see:
   http://creativecommons.org/licenses/by/2.5/legalcode
 */

digraph RoleModels {
  /* 11 inches x 96 DPI is 1056 pixels wide */
  size="11,11";
  edge [fontsize=10.0 len=1.5 arrowhead=none labeldistance=1.5]
  node [shape=plaintext];
  root = User;
  rankdir = "BT";

  /* Person -> User */
  User
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD>User</TD>
 </TR>
 <TR>
  <TD PORT="persons"><FONT POINT-SIZE="10.0">(persons)</FONT></TD>
 </TR>
</TABLE>
   >];

  Person
   [label=<
<TABLE BORDER="2" CELLBORDER="0" BGCOLOR="white">
 <TR>
  <TD PORT="user" COLSPAN="2"><FONT POINT-SIZE="10.0">user</FONT></TD>
 </TR>
 <TR>
  <TD COLSPAN="2">Person</TD>
 </TR>
 <TR>
  <TD PORT="author"><FONT POINT-SIZE="10.0">(author)</FONT></TD>
  <TD PORT="docs"><FONT POINT-SIZE="10.0">(docs)</FONT></TD>
 </TR>
</TABLE>
   >];

  UserPersons
   [shape=diamond label="user-(persons)" fontsize=10.0 style=filled];

  Person:user -> UserPersons
   [taillabel="1"];

  UserPersons -> User:persons
   [headlabel="N" style=dashed];

  /* Author -> Person */
  Author
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD PORT="person" COLSPAN="4"><FONT POINT-SIZE="10.0">person</FONT></TD>
 </TR>
 <TR>
  <TD COLSPAN="4">Author</TD>
 </TR>
 <TR>
  <TD PORT="works"><FONT POINT-SIZE="10.0">(works)</FONT></TD>
  <TD PORT="contributor"><FONT POINT-SIZE="10.0">(contributor)</FONT></TD>
  <TD PORT="reviewer"><FONT POINT-SIZE="10.0">(reviewer)</FONT></TD>
  <TD PORT="admin"><FONT POINT-SIZE="10.0">(admin)</FONT></TD>
 </TR>
</TABLE>
   >];

  PersonAuthor
   [shape=diamond label="person-(author)" fontsize=10.0 style=filled];

  Author:person -> PersonAuthor
   [taillabel="1"];

  PersonAuthor -> Person:author
   [headlabel="1" style=dashed];
  
  /* Person <-> Documentation */
  Documentation
   [label=<
<TABLE BORDER="1" CELLBORDER="0">
 <TR>
  <TD PORT="person"><FONT POINT-SIZE="10.0">person</FONT></TD>
 </TR>
 <TR>
  <TD>Documentation</TD>
 </TR>
</TABLE>
   >];
   
  PersonDocs
   [label="person-(docs)" shape=diamond fontsize=10.0
    style=dotted];

  Documentation:person -> PersonDocs
   [taillabel="1" style=dotted];

  PersonDocs -> Person:docs
   [headlabel="N" style=dotted];

  /* Work <-> Author */
  Work
   [label=<
<TABLE BORDER="1" CELLBORDER="0">
 <TR>
  <TD PORT="authors"><FONT POINT-SIZE="10.0">(authors)</FONT></TD>
 </TR>
 <TR>
  <TD>Work</TD>
 </TR>
 <TR>
  <TD PORT="proposal"><FONT POINT-SIZE="10.0">(proposal)</FONT></TD>
 </TR>
</TABLE>
   >];

  WorksAuthors
   [label="WorksAuthors" shape=diamond fontsize=10.0 style=dotted];

  Work:authors -> WorksAuthors
   [taillabel="N" style=dotted];

  WorksAuthors -> Author:works
   [headlabel="N" style=dotted];

  /* Contributor -> Author */
  Contributor
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD PORT="author"><FONT POINT-SIZE="10.0">author</FONT></TD>
 </TR>
 <TR>
  <TD>Contributor</TD>
 </TR>
 <TR>
  <TD PORT="tasks"><FONT POINT-SIZE="10.0">(tasks)</FONT></TD>
 </TR>
</TABLE>
   >];

  ContributorAuthor
   [shape=diamond label="author-(contributor)" fontsize=10.0 style=filled];

  Contributor:author -> ContributorAuthor
   [taillabel="1"];

  ContributorAuthor -> Author:contributor
   [headlabel="1" style=dashed];

  /* Proposal <-> Contributor */
  Proposal
   [label=<
<TABLE BORDER="1" CELLBORDER="0">
 <TR>
  <TD PORT="work"><FONT POINT-SIZE="10.0">work</FONT></TD>
 </TR>
 <TR>
  <TD>Proposal</TD>
 </TR>
</TABLE>
   >];

  WorkProposal
   [label="work-(proposal)" shape=diamond fontsize=10.0
    style=dotted];

  Proposal:work -> WorkProposal
   [taillabel="1" style=dotted];

  WorkProposal -> Work:proposal
   [headlabel="1" style=dotted];

  /* Task <-> Contributor */
  Task
   [label=<
<TABLE BORDER="1" CELLBORDER="0">
 <TR>
  <TD PORT="contributors"><FONT POINT-SIZE="10.0">(contributors)</FONT></TD>
 </TR>
 <TR>
  <TD>Task</TD>
 </TR>
</TABLE>
   >];

  TasksContributors
   [label="TasksContributors" shape=diamond fontsize=10.0
    style=dotted];

  Task:contributors -> TasksContributors
   [taillabel="N" style=dotted];

  TasksContributors -> Contributor:tasks
   [headlabel="N" style=dotted];

  /* Reviewer -> Author */
  Reviewer
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD PORT="author"><FONT POINT-SIZE="10.0">author</FONT></TD>
 </TR>
 <TR>
  <TD>Reviewer</TD>
 </TR>
 <TR>
  <TD PORT="reviews"><FONT POINT-SIZE="10.0">(reviews)</FONT></TD>
 </TR>
</TABLE>
   >];

  AuthorReviewer
   [shape=diamond label="author-(reviewer)" fontsize=10.0 style=filled];

  Reviewer:author -> AuthorReviewer
   [taillabel="1"];

  AuthorReviewer -> Author:reviewer
   [headlabel="1" style=dashed labelangle=75.0];

  /* Review -> Reviewer */
  Review
   [label=<
<TABLE BORDER="1" CELLBORDER="0">
 <TR>
  <TD PORT="reviewer"><FONT POINT-SIZE="10.0">reviewer</FONT></TD>
 </TR>
 <TR>
  <TD>Review</TD>
 </TR>
</TABLE>
   >];

  ReviewerReviews
   [label="reviewer-(reviews)" shape=diamond fontsize=10.0
    style=dotted];

  Review:reviewer -> ReviewerReviews
   [taillabel="1" style=dotted];

  ReviewerReviews -> Reviewer:reviews
   [headlabel="N" style=dotted];

  /* Administrator -> Author */
  Administrator
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD PORT="author"><FONT POINT-SIZE="10.0">author</FONT></TD>
 </TR>
 <TR>
  <TD>Administrator</TD>
 </TR>
 <TR>
  <TD PORT="host"><FONT POINT-SIZE="10.0">(host)</FONT></TD>
 </TR>
</TABLE>
   >];

 AuthorAdministrator
   [shape=diamond label="author-(admin)" fontsize=10.0 style=filled];

  Administrator:author -> AuthorAdministrator
   [taillabel="1"];

  AuthorAdministrator -> Author:admin
   [headlabel="1" style=dashed];

  /* Host -> Administrator */
  Host
   [label=<
<TABLE BORDER="2" CELLBORDER="0">
 <TR>
  <TD PORT="admin"><FONT POINT-SIZE="10.0">admin</FONT></TD>
 </TR>
 <TR>
  <TD>Host</TD>
 </TR>
</TABLE>
   >];

  HostAdministrator
   [shape=diamond label="admin-(host)" fontsize=10.0 style=filled];

  Host:admin -> HostAdministrator
   [taillabel="1"];

  HostAdministrator -> Administrator:host
   [headlabel="1" style=dashed];
}
