Application uses build system Maven, which simplifies the application build substantially.
mvn install:install-file -Dfile=flatworm-2.1-SNAPSHOT.jar -DgroupId=com.blackbear.flatworm -DartifactId=flatworm -Dversion=2.1-SNAPSHOT -Dpackaging=jar
Afterwards the WAR archive should be created in target directory.
The server is written in Java EE and has JSF web based interface.
To server are connecting through RESTÂ API another applications which currently are:
TODO
For the application has been established Hudson continuous integration server, where integration tests are running after every build. Several reports can be also found there.
The application operates on domain model represented by following diagram:
The entities represented by this domain model can be found in org.drosera.server.model package.
The Competitor and Category entities are both divided into two separate entities, one representing competition entry and the second representing stage entry (CompetitorRun and CategoryRun).
Associations CompetitorRun-CardReading and Punch-Control are not explicitly represented in entities but are rather made by querying the persistence layer. The reason for this is, that mandatory that read card has to have any competitor or control represented among the entities.
All results are counted on demand and stored in cache rather than stored in persistence storage. When change occurred, the result is refreshed or removed from cache.
All classess representing result for singular competitor are implementing some descendant of ResultInterface, which has two children interfaces - StageResultInterface for stage results and CompetitionResultInterface for competition results. Those interfaces are implemented by rules-specific classes i.e. IOFStageResult and IOFCompetitionResult.
Results positions and results for competitors are counted in result managers. ResultsManagerInterface defines interface for all results managers, which is implemented by AbstractCommonResultsManager which includes all algorithms which are not specific for certain rules system - for which this class must be extended like in IOFResultsManager.
Class IOFBestSplitsManager (implementing IOFBestSplitsInterface) is used to store best splits and punch→controlSequence relations.