Changed learning design activities and transition collections to use all-delete-orphan cascade management. This will ensure that the secondary records are created and removed as required.This required fixing code that trigger cascade problems and also highlighted some session problems with the learner cache created by Jacky.
Implementation getLearningLibraryByTitle was wrong and the method is not used so the whole method was removed.Implementation of getLearningLibraries was returning all libraries in the database. Changed to only return the active libraries (ie the libraries that have been successfully installed).
Added a MessageSource manager, which will load arbitrary message sources on the fly. It is used to access the tool's language files from the authoring code, but it could be used by any part of LAMS to access a resource file as long as the path to the file is known.
Moved the IBaseDAO and BaseDAO classes to their own packages and out of learning design. This interface and class may be used as the basis for any Hibernate DAO in the system - it isn't compulsory but it is a handy way of getting functionality. If we are going to be using it all over the place, having the classes in the learning design package is not a good idea.
Updated BasicToolVO to match the current Tool object, and added an interface to BasicToolVO. Now the call in lLamsToolService which allows a tool to access its own record in the lams_tool table refers to an interface (IToolVO) rather than a POJO. The code still passes a BasicToolVO to any calling tools, but it is better to refer only to interfaces in a service definition, rather than a concrete class.
Split learner and export urls (in Tool) to have separate urls for teacher, learner and authoring modes. Added language file columns to activity and tool - this will be used to internationalise the activity and tool name and descriptions that are currently in the database.
Modified GroupingDAO to ensure that "real" grouping objects are returned, not just CGLIB versions. This was causing a problem when storing groupings as it was unable to cast existing groupings to RandomGrouping or ChosenGrouping