== Idea == Several applications have a need for the idea of working in Batches. That is to say, executing some sort of function on multiple Molgenis entities at one time. Examples are choosing multiple samples in a LIMS system to simultaneously perform protocols on, and selecting multiple animals to apply an event (wean, feed, draw blood sample, etc.) to. The idea is to create a generic plugin that can serve all Molgenis GCC applications. == Requirements == * User must be able to add entities to a Batch in the UI in an intuitive way, e.g. by clicking on one or more entities in a list/matrix or by dragging them into a designated part of the screen. * Batch must be able to hold different kinds of Molgenis entities at the same time, e.g. a Sample, two Animals and a Group of Individuals. * User must be able to always inspect the contents of their current Batch, e.g. by clicking on a "shopping cart" icon in a corner of the UI. * User must be able to edit or clear the Batch. * Batch must be accessible from all parts (form screens, plugins) of the application. * There must be a UI screen where the user can apply one or more features on the current Batch. It would be very nice if you could select a number of entities in some sort of matrix view screen and then immediately apply features by for instance right-clicking on one of the selected items. In this way you'd even bypass the "shopping cart" and the need to go to a different screen for the feature application. * It would be nice if there were two kinds of Batches: * Static Batch, a fixed list of entities. * Dynamic Batch, a list based on a query that is evaluated anew every time. For this, we need some sort of query editor where users can build a query in an intuitive (graphical?) way, a bit like the current filtering tool in the standard Molgenis form screen. * Maybe it would be useful to support multiple Batches per user? == Technical Implementation == The idea is to have a Singleton class, say "Batches", that contains a map, which is composed of a Molgenis User's ID (from the auth package) as the key, and a list as the value. The list would contain Molgenis entities currently in the Batch. When the application requests the Batch information, the map would be queried with the ID of the current Molgenis User, and the list would be returned. If we were to support multiple Batches, we could make the map consist of User ID as the key and a list of lists of Batches as values. But how can we then find the right Batch, i.e. the Batch the user wants to work with at that moment? The dynamic Batch would have to be very different from the static Batch. It is not a list of entities but a list of query parameters. However, it would be handy to make the two kinds of Batches conform to the same interface, so we can have lists in our map that can hold both types at the same time.