<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE ACTIVITY_TEMPLATE SYSTEM 'file:./collaboration/xml/activity_template.dtd'>
  <ACTIVITY_TEMPLATE NAME="Course" IDENTIFIER="_T_.Course" ASSIGNED_ROLES="_T_.Course::_R_.Instructor _T_.Course::_R_.Assistant _T_.Course::_R_.Student">
    <ROLE NAME="Instructor" IDENTIFIER="_T_.Course::_R_.Instructor">
      <ADMISSION_CONSTRAINTS>
        <AND TYPE="positive">
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Assistant" PRINCIPAL="thisUser"/>
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Student" PRINCIPAL="thisUser"/>
        </AND>
      </ADMISSION_CONSTRAINTS>
      <OPERATION NAME="CreateExam" IDENTIFIER="_T_.Course::_R_.Instructor::_OP_.CreateExam">
        <ACTION>
          <NEW_ACTIVITY NAME="ex" ACTIVITY_TEMPLATE_REF="_T_.Course::_T_.Examination" IDENTIFIER="_T_.Course::_T_.Examination::_AC_.ex">
            <ROLE_ASSIGNMENT ROLE="_T_.Course::_T_.Examination::_R_.Examiner">
              <PRINCIPAL URN="thisUser"/>
            </ROLE_ASSIGNMENT>
          </NEW_ACTIVITY>
        </ACTION>
      </OPERATION>
    </ROLE>
    <ROLE NAME="Assistant" IDENTIFIER="_T_.Course::_R_.Assistant">
      <ADMISSION_CONSTRAINTS>
        <AND TYPE="positive">
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Instructor" PRINCIPAL="thisUser"/>
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Student" PRINCIPAL="thisUser"/>
        </AND>
      </ADMISSION_CONSTRAINTS>
    </ROLE>
    <ROLE NAME="Student" IDENTIFIER="_T_.Course::_R_.Student">
      <ADMISSION_CONSTRAINTS>
        <AND TYPE="positive">
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Instructor" PRINCIPAL="thisUser"/>
          <IS_MEMBER TYPE="negative" ROLE="_T_.Course::_R_.Assistant" PRINCIPAL="thisUser"/>
        </AND>
      </ADMISSION_CONSTRAINTS>
    </ROLE>
    <ACTIVITY_TEMPLATE NAME="Examination" IDENTIFIER="_T_.Course::_T_.Examination" ASSIGNED_ROLES="_T_.Course::_T_.Examination::_R_.Examiner">
      <ROLE NAME="Examiner" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examiner">
        <ADMISSION_CONSTRAINTS>
          <MEMBER_COUNT RELATION="eq" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examiner_.1052155873831">
            <MEMBERS ROLE="_T_.Course::_T_.Examination::_R_.Examiner"/>
          </MEMBER_COUNT>
        </ADMISSION_CONSTRAINTS>
        <OPERATION NAME="SetPaper" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examiner::_OP_.SetPaper">
          <PRECONDITION>
            <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examiner_.1050512377494">
              <EVENT_COUNT SUFFIX="start" EVENT_TYPE="_T_.Course::_T_.Examination::_R_.Examiner::_OP_.SetPaper" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examiner_.1050512413090"/>
            </EVENT_CONDITION>
          </PRECONDITION>
          <ACTION>
            <NEW_OBJECT CODEBASE="sample.course.ExamPaper" NAME="exam" IDENTIFIER="_T_.Course::_T_.Examination::_OT_.exam"/>
            <OBJECT_INTERFACE OBJECT_REF="_T_.Course::_T_.Examination::_OT_.exam" CODEBASE="sample.course.ExamPaperUI" INVOKED_METHODS="setQuestion"/>
          </ACTION>
        </OPERATION>
      </ROLE>
      <ROLE ASSIGN="_T_.Course::_R_.Student" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee" NAME="Examinee">
        <OPERATION NAME="StartExam" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee::_OP_.StartExam">
          <PRECONDITION>
            <AND TYPE="positive">
              <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee_.1050513477382">
                <EVENT_COUNT SUFFIX="start" EVENT_TYPE="_T_.Course::_T_.Examination::_R_.Examinee::_OP_.StartExam" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee_.1050589467121">
                  <EVENT_ATTRIBUTE RELATION="eq" VALUE="thisUser" NAME="invoker"/>
                </EVENT_COUNT>
              </EVENT_CONDITION>
              <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="1" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee_.1050513556814">
                <EVENT_COUNT SUFFIX="finish" EVENT_TYPE="_T_.Course::_T_.Examination::_R_.Examiner::_OP_.SetPaper" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Examinee_.1050589473745"/>
              </EVENT_CONDITION>
            </AND>
          </PRECONDITION>
          <ACTION>
            <NEW_OBJECT CODEBASE="sample.course.AnswerBook" NAME="ans" IDENTIFIER="_T_.Course::_T_.Examination::_OT_.ans"/>
            <NEW_ACTIVITY ACTIVITY_TEMPLATE_REF="_T_.Course::_T_.Examination::_T_.ExamSession" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_AC_.es" NAME="es" OBJECT_REFS="_T_.Course::_T_.Examination::_OT_.exam _T_.Course::_T_.Examination::_OT_.ans">
              <ROLE_ASSIGNMENT ROLE="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate">
                <PRINCIPAL URN="thisUser"/>
              </ROLE_ASSIGNMENT>
            </NEW_ACTIVITY>
          </ACTION>
        </OPERATION>
      </ROLE>
      <ROLE NAME="Grader" ASSIGN="_T_.Course::_R_.Instructor _T_.Course::_R_.Assistant" IDENTIFIER="_T_.Course::_T_.Examination::_R_.Grader"/>
      <ACTIVITY_TEMPLATE NAME="ExamSession" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession" ASSIGNED_ROLES="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate _T_.Course::_T_.Examination::_T_.ExamSession::_R_.Checker">
        <PASSED_OBJECT NAME="a" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_O_.a" OBJECT_CONTEXT_REF="_T_.Course::_T_.Examination::_OT_.ans"/>
        <PASSED_OBJECT OBJECT_CONTEXT_REF="_T_.Course::_T_.Examination::_OT_.exam" NAME="e" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_O_.e"/>
        <ROLE NAME="Candidate" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate">
          <OPERATION NAME="Write" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Write">
            <PRECONDITION>
              <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050514203051">
                <EVENT_COUNT SUFFIX="start" EVENT_TYPE="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Write" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050589637246"/>
              </EVENT_CONDITION>
            </PRECONDITION>
            <ACTION>
              <OBJECT_INTERFACE OBJECT_REF="_T_.Course::_T_.Examination::_T_.ExamSession::_O_.a" CODEBASE="sample.course.AnswerBookUI" INVOKED_METHODS="writeAnswer readAnswer"/>
            </ACTION>
          </OPERATION>
          <OPERATION NAME="Submit" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Submit">
            <PRECONDITION>
              <AND TYPE="positive">
                <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050514631669">
                  <EVENT_COUNT SUFFIX="start" EVENT_TYPE="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Submit" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050589683030"/>
                </EVENT_CONDITION>
                <EVENT_CONDITION TYPE="positive" RELATION="gt" VALUE="0" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050514566903">
                  <EVENT_COUNT SUFFIX="finish" EVENT_TYPE="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Write" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate_.1050589699611"/>
                </EVENT_CONDITION>
              </AND>
            </PRECONDITION>
          </OPERATION>
          <OPERATION NAME="Read" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Read">
            <ACTION>
              <OBJECT_INTERFACE CODEBASE="sample.course.ViewExamUI" OBJECT_REF="_T_.Course::_T_.Examination::_T_.ExamSession::_O_.e" INVOKED_METHODS="readPaper"/>
            </ACTION>
          </OPERATION>
        </ROLE>
        <ROLE NAME="Checker" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Checker">
          <OPERATION NAME="Grade" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Checker::_OP_.Grade">
            <PRECONDITION>
              <EVENT_CONDITION TYPE="positive" RELATION="eq" VALUE="1" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Checker_.1050514960903">
                <EVENT_COUNT SUFFIX="finish" EVENT_TYPE="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Candidate::_OP_.Submit" IDENTIFIER="_T_.Course::_T_.Examination::_T_.ExamSession::_R_.Checker_.1050589832854"/>
              </EVENT_CONDITION>
            </PRECONDITION>
            <ACTION>
              <OBJECT_INTERFACE CODEBASE="sample.course.GraderUI" OBJECT_REF="_T_.Course::_T_.Examination::_T_.ExamSession::_O_.a" INVOKED_METHODS="readAnswer, setGrade"/>
            </ACTION>
          </OPERATION>
        </ROLE>
      </ACTIVITY_TEMPLATE>
    </ACTIVITY_TEMPLATE>
  </ACTIVITY_TEMPLATE>
