Sunday, 21 July 2024, 05:17:06

BOSS Online Submission System

BOSS Project

Latest Release



The Model is an abstract set of interfaces that encapsulate any code in the system that could possibly have multiple realisations. The Model is split into a set of discrete components, each with its own factory for generating classes supporting the defined interfaces. The discrete components currently in the Model are the auto assignment algorithms, the database access objects, sending mail, session authentication, the testing framework, and administrative operations.


Each component of the Model has its own factory to generate classes compliant with the interfaces the model defines. A factory Registrar is used to register implementations for particular interfaces. It is the responsibility of a program to register factory interfaces with the Registrar, and the frontend does this by reading a file and using introspection.

Factories derive from the Factory interface, which requires methods for Factories to explain which configuration options they require, and these are used for automatic configuration the first time BOSS2 is run.


Auto assignment algorithms

Auto assignment algorithms are responsible for assigning markers to students automatically. The Factory provides methods to query what algorithms are available and their class names. The implementing classes themselves provide a single method that takes a list of markers, a list of students, and returns a map of markers to the students that they will mark.

Auto Assignment

Data access objects

Data access objects are responsible for brokering persistent storage. The model defines a set of beans that may be stored in the database. and a set of query results that are returned by DAOs tailored for Student, Staff, Marker and Admin operations. The Factory provides methods to initialise storage, begin/end/abort transactions, and obtain objects to broker these beans with the storage. Brokerage is done by a persistent identifier (which is a java.lang.Long).

Data Access

Beans defined for storage

AssignmentAn assignmentModule, Person, ResourceDAO provides access to markers
DeadlineRevisionA deadline revisionAssignment, Person
EntityGeneric entity in the databaseNo DAO, used internally
MarkA markMarkingAssignment, Person
MarkingAssignmentA binding of student to markerAssignment, Person
MarkingCategoryA marking categoryAssignment
ModelA modelTop level entity in the model tree
ModuleA moduleModel, PersonDAO provides access to students and administrators
PersonA user of the BOSS2 systemUnique identifier doubles up as username
ResourceA stored resource (file)DAO provides access to data via streams
ResultA published resultAssignment, Person
SubmissionA submissionAssignment, Person, Resource
TestA testAssignment, ResourceDAO provides access to parameters

Specialised query results

DAOQueriesResultUsed by
IAdminInterfaceQueriesDAOFetching models to administrateAdminModelsQueryResultAministrator 'model management' page
IAdminInterfaceQueriesDAOFetching modules for a modelAdminModulesQueryResultAdministrator 'module management' page
IMarkerInterfaceQueriesDAOFetching assignments to markMarkerAssignmentsQueryResultMarker 'assignments to mark' page
IMarkerInterfaceQueriesDAOFetching marks for a marking assignmentMarkerMarksQueryResultMarker 'marks for a student' page
IMarkerInterfaceQueriesDAOFetching students to mark for an assignmentMarkerStudentsQueryResultMarker 'students to mark' page
IMarkerInterfaceQueriesDAOFetching submissions by a student for an assignmentMarkerSubmissionsQueryResultMarker 'submissions by student' page
IStaffInterfaceQueriesDAOFetching assignments for a moduleStaffAssignmentsQueryResultStaff 'assignments' page
IStaffInterfaceQueriesDAOFetching deadline revisiosn for an assignmentStaffDeadlineRevisionsQueryResultStaff 'deadline revisions' page
IStaffInterfaceQueriesDAOFetching marking assignments for an assignmentStaffMarkingAssignmentsQueryResultStaff 'marking assignments' page
IStaffInterfaceQueriesDAOFetching modules to adminsitrateStaffModulesQueryResultStaff 'modules' page
IStaffInterfaceQueriesDAOFetching results for an assignmentStaffResultsQueryResultStaff 'results' page
IStaffInterfaceQueriesDAOFetching submissions for an asignmentStaffSubmissionsQueryResultStaff 'submissions' page
IStudentInterfaceQueriesDAOFetching assignments to submit or details for an assignmentStudentAssignmentsQueryResultMultiple student pages
IStudentInterfaceQueriesDAOFetching modules that have assignments to submit toStudentModulesQueryResultStudent 'modules' page
IStudentInterfaceQueriesDAOFetching assignments you have previously submitted toStudentSubmissionCountsQueryResultStudent 'previous submissions' page
IStudentInterfaceQueriesDAOFetching submissions previously submitted to an assignmentStudentSubmissionsQueryResultStudent 'submissions for assignment' page

Sending mail

Mail sending is used for communicating with students, typically via email (although IM could easily be used instead). The Factory provides a method to get an object that can send mails. Mails have a recipient, a subject, and a message and are sent asynchronously.


Session authentication

The Factory provides a method to get an object that can authenticate users or change their authentication credentials. A successful login generates a session which contains the Person that logged in, a preferred locale (currently unused), future test results, and an arbitrary session memory.

Note: Future test results should be moved out of the session and into the testing framework at some point.


Testing framework

The testing framework is responsible for running tests on the submissions.


Test Runner

The test runner is responsible for queuing tests given a submission and a test. It is responsible for unpacking the submission and test resources, running the test executor and feeding the results into the test method. The test runner returns Future TestResult objects for accessing test results when they are complete, and TestRunnerFactory provides a method to generate an object that can queue tests given a submission and a test.

NOTE: Future test results are currently stored in the session by the controller. This is bad, and the Test Runner really should handle this.

Test Method

A test method takes an ExecutionResult object and returns a TestResult object. The TestMethodFactory provides methods to query which test methods are available and their class names.

Test Executor

A test executor takes a submission directory, a test resource directory, and a command to run and generates an ExecutionResult object. TestExecutorFactory provides methods to query which test executors are available and their class names.

Administrative operations

An administration operation takes parameters and performs some form of operation, returning an AdminUtilityResult. The AdminUtilityFactory provides methods to query which operations are available and their class names.