2.17.2: 2011-06-17

net.sf.basedb.clients.web
Class ExperimentExplorer

java.lang.Object
  extended by net.sf.basedb.clients.web.ExperimentExplorer

public class ExperimentExplorer
extends Object

A class for storing settings and doing work related to the experiment explorer tool in the web interface. The JSP pages that uses this class are located in the www/views/experiments/explorer directory and it's subdirectory.

This class is used two things:

Most of the settings are stored in regular ItemContext: objects. This means that they will be saved to the database when the user logs out and loaded again the next time they are needed. Each experiment explorer uses two ItemContext objects. One for storing the settings for the reporter search page and one for the view page. The reporter search settings are stored in the context SessionControl.getCurrentContext(Item.REPORTER, "explorer.id") and the view page settings are stored in SessionControl.getCurrentContext(Item.SPOTDATA, "explorer.id") where "id" is replaced by the bioassayset's id.

Version:
2.0
Author:
nicklas
Last modified
$Date: 2010-01-18 08:31:09 +0100 (Mon, 18 Jan 2010) $

Nested Class Summary
static class ExperimentExplorer.AnnotationGroup
          An annotation group contains statistical information about the spot values falling into the group.
static class ExperimentExplorer.AnnotationSummary
          An annotation summary object keeps track of intensities and other statistical information based on the annotation group.
static class ExperimentExplorer.ReporterPositions
          Cache entry for a reporter with positions.
 
Field Summary
private  Set<Integer> annotationTypeIds
          The currently selected annotation types on the view page.
private  Map<Short,Integer> bioAssays
          Maps a bioassays cube column number to it's id for fast loading by the getBioAssay(DbControl, short) method.
private  BioAssaySet bioAssaySet
          The bioassay set we are exploring.
private  ExperimentExplorer.ReporterPositions[] cache
          The cache of reporter ids matching the current reporter filter.
static String[] COLORS
          Predefined colors for annotation groups
static int DEFAULT_CACHE_SIZE
          Deprecated. In 2.11, for performance reasons the cache always contains the full set of reporters
private static ItemContext defaultReporterContext
          The default context for the reporter search page.
private static Map<RawDataType,ItemContext> defaultSpotContexts
          Stores default context for the spot data list on the view page.
private  int matchingReporters
          Number of reporter that match the reporter search.
private  int[] posCache
           
private  int positionIndex
          The index of the curren position on the view page.
private  int reporterIndex
          The index of the current reporter on the view page.
private  SnapshotManager snapshotManager
          The snapshot manager that loads annotation values.
static int SPOT_ALL
          Special value to use in the setPositionIndex(int) method to show all positions.
static int SPOT_AVG
          Special value to use in the setPositionIndex(int) method to calculate the average for each bioassay.
private  Map<Integer,ExperimentExplorer.AnnotationSummary> summaryCache
          Caches annotation summaries.
 
Constructor Summary
private ExperimentExplorer(BioAssaySet bioAssaySet)
          Create a new experiment explorer.
 
Method Summary
 ItemContext getAndSetReporterContext(SessionControl sc, PageContext pageContext)
          Get and update the current settings for the reporter context.
 ItemContext getAndSetSpotContext(SessionControl sc, PageContext pageContext)
          Get and update the current settings for the spot context.
 ExperimentExplorer.AnnotationSummary getAnnotationSummary(DbControl dc, AnnotationType annotationType)
          Get an AnnotationSummary object which can be used to calculate means and other values for each annotation group.
 int getAnnotationTypeId()
          Deprecated. In 2.14, use getAnnotationTypeIds() instead
 Set<Integer> getAnnotationTypeIds()
          Get the selected annotation types.
 List<AnnotationType> getAnnotationTypes(DbControl dc, boolean includeBioAssayAnnotations)
          Get the annotation types that are of interest in this experiment.
 BioAssay getBioAssay(DbControl dc, short columnNo)
          Get the bioassay with the specified column number in the data cube.
 BioAssaySet getBioAssaySet(DbControl dc)
          Get the bioassay set that is currently beeing explored.
 int getCacheSize()
          The number of reporter id'd to cache.
 ItemContext getDefaultReporterContext()
          Get the default reporter context that is used to initialise the actual context.
 ItemContext getDefaultSpotContext()
          Get the default spot context that is used to initialise the actual context.
static ExperimentExplorer getExplorer(BioAssaySet bioAssaySet)
          Get the existing experiment explorer for a bioassayset or create a new one if none exist yet.
 int getMatchingReporters(DbControl dc)
          Get the number of reporters matching the current reporter filter.
 int getNumBioAssays()
          Get the number of bioassays in the bioassayset.
 int getNumPositions(DbControl dc, int index)
          Get the number of unique positions the reporter of the specifed index is present in among all the bioassays in the bioassay set.
 int getNumPositions(DbControl dc, ReporterData reporter)
          Deprecated. In 2.11 for performance reasons, use getNumPositions(DbControl, int) instead
 int getNumReporters()
          Get the total number of unique reporters found in the bioassayset.
 int getNumSpots()
          Get the total number of spots in the bioassayset.
 int getPosition(DbControl dc, int reporterIndex, int positionIndex)
          Get the position number of the position specified by the given reporter and position index.
 int getPosition(DbControl dc, ReporterData reporter, int positionIndex)
          Deprecated. In 2.11 for performance reasons, use getPosition(DbControl, int, int) instead
 int getPositionIndex()
          Get the index of the current position.
 ReporterData getReporter(DbControl dc, int index)
          Get the reporter for the specified index.
 int getReporterIndex()
          Get the index of the current reporter.
private  int getReporterIndex(DbControl dc, ReporterData reporter)
          Deprecated. This method is a helper for other deprecated methods. Do not use it in non-deprecated methods.
 DynamicSpotQuery getReporterQuery(DbControl dc, List<String> selectionList)
          Get a query returning the reporter data used by the reporter search page.
 SnapshotManager getSnapshotManager()
          Get the snapshot manager that is used to load annotation values.
 DynamicSpotQuery getSpotQuery(DbControl dc, int reporterIndex, int positionIndex, List<TableColumn> selectionList)
          Get a query returning spot data for a given reporter and position.
 DynamicSpotQuery getSpotQuery(DbControl dc, ReporterData reporter, int positionIndex, List<TableColumn> selectionList)
          Deprecated. In 2.11. For performance reasons, use getSpotQuery(DbControl, int, int, List) instead
 String getSubContext()
          Get the subcontext name used for the ItemContext objects related to this explorer.
private  void initReporterCache(DbControl dc)
           
 void setAnnotationTypeId(int annotationTypeId)
          Deprecated. In 2.14, use setAnnotationTypeIds(Collection) instead
 void setAnnotationTypeIds(Collection<Integer> ids)
          Update the selected annotation types.
 void setCacheSize(int cacheSize)
          Deprecated. In 2.11. For performance reasons the full reporter set is always cached.
 void setPositionIndex(int positionIndex)
          Set the index of the curren position.
 void setReporterIndex(int reporterIndex)
          Set the index of the currently viewed reporter.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SPOT_ALL

public static final int SPOT_ALL
Special value to use in the setPositionIndex(int) method to show all positions.

See Also:
Constant Field Values

SPOT_AVG

public static final int SPOT_AVG
Special value to use in the setPositionIndex(int) method to calculate the average for each bioassay.

See Also:
Constant Field Values

DEFAULT_CACHE_SIZE

public static final int DEFAULT_CACHE_SIZE
Deprecated. In 2.11, for performance reasons the cache always contains the full set of reporters
The size of the cache that stores reporter id's matching the search.

See Also:
getCacheSize(), Constant Field Values

COLORS

public static final String[] COLORS
Predefined colors for annotation groups


defaultReporterContext

private static final ItemContext defaultReporterContext
The default context for the reporter search page.


defaultSpotContexts

private static final Map<RawDataType,ItemContext> defaultSpotContexts
Stores default context for the spot data list on the view page. Different defaults for each raw data type since they can have different number of channels.


bioAssaySet

private final BioAssaySet bioAssaySet
The bioassay set we are exploring.


snapshotManager

private SnapshotManager snapshotManager
The snapshot manager that loads annotation values.


bioAssays

private final Map<Short,Integer> bioAssays
Maps a bioassays cube column number to it's id for fast loading by the getBioAssay(DbControl, short) method.


posCache

private int[] posCache

cache

private ExperimentExplorer.ReporterPositions[] cache
The cache of reporter ids matching the current reporter filter.


reporterIndex

private int reporterIndex
The index of the current reporter on the view page.

See Also:
getReporterIndex()

positionIndex

private int positionIndex
The index of the curren position on the view page.

See Also:
getPositionIndex()

matchingReporters

private int matchingReporters
Number of reporter that match the reporter search.


annotationTypeIds

private Set<Integer> annotationTypeIds
The currently selected annotation types on the view page.


summaryCache

private Map<Integer,ExperimentExplorer.AnnotationSummary> summaryCache
Caches annotation summaries.

Constructor Detail

ExperimentExplorer

private ExperimentExplorer(BioAssaySet bioAssaySet)
Create a new experiment explorer.

Method Detail

getExplorer

public static ExperimentExplorer getExplorer(BioAssaySet bioAssaySet)
Get the existing experiment explorer for a bioassayset or create a new one if none exist yet. The returned object is cached in the SessionControl:s session settings.

Parameters:
bioAssaySet - The bioassay set to get an experiment explorer for
Returns:
An ExperimentExplorer object

getBioAssaySet

public BioAssaySet getBioAssaySet(DbControl dc)
Get the bioassay set that is currently beeing explored.

Parameters:
dc - The DbControl used for access the database
Returns:
The BioAssaySet object
See Also:
BioAssaySet.getById(DbControl, int)

getSnapshotManager

public SnapshotManager getSnapshotManager()
Get the snapshot manager that is used to load annotation values.

Since:
2.14

getNumBioAssays

public int getNumBioAssays()
Get the number of bioassays in the bioassayset.


getBioAssay

public BioAssay getBioAssay(DbControl dc,
                            short columnNo)
Get the bioassay with the specified column number in the data cube. This method is useful since spot queries (see getSpotQuery(DbControl, ReporterData, int, List)) can only return the column number, but we usually want to display the name, etc.

Parameters:
dc - The DbControl object used to get the bioassay
columnNo - The colum number
Returns:
The bioassay with the specified column number or null if no bioassay is found

getCacheSize

public int getCacheSize()
The number of reporter id'd to cache. For performance reasons the id's of the reporters matching the reporter search are cached. This means we can step forwards and backwards more quickly on the view page since we don't have to execute the reporter search each time. This method should return the same value as getMatchingReporters(DbControl) unless the cache hasn't been initialized.

Returns:
The size of the cache, or 0 if the cache has not been initialized

setCacheSize

public void setCacheSize(int cacheSize)
Deprecated. In 2.11. For performance reasons the full reporter set is always cached.

Set the size of the reporter cache.

Parameters:
cacheSize - The size
See Also:
getCacheSize()

getNumReporters

public int getNumReporters()
Get the total number of unique reporters found in the bioassayset.

See Also:
BioAssaySet.getNumReporters()

getNumSpots

public int getNumSpots()
Get the total number of spots in the bioassayset.

See Also:
BioAssaySet.getNumSpots()

getSubContext

public String getSubContext()
Get the subcontext name used for the ItemContext objects related to this explorer. The name is created like this: explorer.id where id is replaced with the id of the bioassayset we are exploring.

Returns:
The subcontext name

getDefaultSpotContext

public ItemContext getDefaultSpotContext()
Get the default spot context that is used to initialise the actual context.

Returns:
An ItemContext object

getDefaultReporterContext

public ItemContext getDefaultReporterContext()
Get the default reporter context that is used to initialise the actual context.

Returns:
An ItemContext object

getAndSetSpotContext

public ItemContext getAndSetSpotContext(SessionControl sc,
                                        PageContext pageContext)
Get and update the current settings for the spot context. The spot context is used on the view page for the list with spot data.

Parameters:
sc - The SessionControl of the logged in user
pageContext - The PageContext containing the updated settings, or null to not update the settings
Returns:
An ItemContext object
See Also:
Base.getAndSetCurrentContext(SessionControl, Item, PageContext, ItemContext)

getAndSetReporterContext

public ItemContext getAndSetReporterContext(SessionControl sc,
                                            PageContext pageContext)
Get and update the current settings for the reporter context. The reporter context is used on the reporter search page.

Parameters:
sc - The SessionControl of the logged in user
pageContext - The PageContext containing the updated settings, or null to not update the settings
Returns:
An ItemContext object
See Also:
Base.getAndSetCurrentContext(SessionControl, Item, PageContext, ItemContext)

getAnnotationTypeId

public int getAnnotationTypeId()
Deprecated. In 2.14, use getAnnotationTypeIds() instead

Get the id of the selected annotation type.

Returns:
The id of the selected annotation type or 0 if no annotation type is selected

setAnnotationTypeId

public void setAnnotationTypeId(int annotationTypeId)
Deprecated. In 2.14, use setAnnotationTypeIds(Collection) instead

Set the id of the selected annotation type. Calling this method removes all previous selections.

Parameters:
annotationTypeId - The annotation type id or 0 if none is selected

getAnnotationTypeIds

public Set<Integer> getAnnotationTypeIds()
Get the selected annotation types.

Returns:
A set with the id's of the selected annotation types
Since:
2.14

setAnnotationTypeIds

public void setAnnotationTypeIds(Collection<Integer> ids)
Update the selected annotation types.

Parameters:
ids - A collection containing the id's of all annotation types that should currently be selected, all other annotation types are automatically deselected
Since:
2.14

getAnnotationTypes

public List<AnnotationType> getAnnotationTypes(DbControl dc,
                                               boolean includeBioAssayAnnotations)
Get the annotation types that are of interest in this experiment. Ie. the experimental factors of the experiment the bioassayset we are exploring belongs to. Optionally, you can also get annotations for bioassays.

Parameters:
dc - The DbControl for database access
includeBioAssayAnnotations - If bioassay annotation should be included even if they are not experimental factors
Returns:
A list of annotation types, null may be returned if no annotation types exists
See Also:
Experiment.getExperimentalFactors()

getAnnotationSummary

public ExperimentExplorer.AnnotationSummary getAnnotationSummary(DbControl dc,
                                                                 AnnotationType annotationType)
Get an AnnotationSummary object which can be used to calculate means and other values for each annotation group. When the annotation summary object is create each bioassay is placed in one annotation group based on which annotatations it have. Each annotation group is unique and is the only one with the same combination of annotation values. More than one bioassay may be placed in the same group if they are annotated with the same values.

Parameters:
dc - The DbControl for database access
annotationType - The annotation type, mustn't be null
Returns:
An AnnotationSummary object
See Also:
ExperimentExplorer.AnnotationGroup.getAnnotationValues()

getMatchingReporters

public int getMatchingReporters(DbControl dc)
Get the number of reporters matching the current reporter filter.

Parameters:
dc - The DbControl for database access
Returns:
an int of matching reporters

getReporterIndex

public int getReporterIndex()
Get the index of the current reporter. It should be a value between 0 and getMatchingReporters(DbControl)-1.

See Also:
getReporter(DbControl, int)

setReporterIndex

public void setReporterIndex(int reporterIndex)
Set the index of the currently viewed reporter. If the index is below zero or greater than or equal to getMatchingReporters(DbControl) it is set to the nearest index.

Parameters:
reporterIndex - The new index
See Also:
getReporter(DbControl, int)

getReporter

public ReporterData getReporter(DbControl dc,
                                int index)
Get the reporter for the specified index. The index should be between 0 and the number of matching reporters minus 1.

Parameters:
dc - The DbControl to use for database access
index - The index
Returns:
The reporter or null if no reporter is found at the specified index
See Also:
getMatchingReporters(DbControl)

getNumPositions

public int getNumPositions(DbControl dc,
                           int index)
Get the number of unique positions the reporter of the specifed index is present in among all the bioassays in the bioassay set. The index should be between 0 and the number of matching reporters minus 1.

Parameters:
dc - The DbControl to use for database access
index - The reporter index
Returns:
The number of positions, or 0 if the index is outside the valid range
Since:
2.11
See Also:
getReporter(DbControl, int), getMatchingReporters(DbControl)

getNumPositions

public int getNumPositions(DbControl dc,
                           ReporterData reporter)
Deprecated. In 2.11 for performance reasons, use getNumPositions(DbControl, int) instead

Get the number of unique positions a reporter is present in among all bioassays in the bioassayset.

Parameters:
dc - The DbControl to use for database access
reporter - The reporter, or null to find spots without any reporter

getPositionIndex

public int getPositionIndex()
Get the index of the current position. It should be a value between 0 and getNumPositions(DbControl, int)-1, or one of the SPOT_ALL or SPOT_AVG special values (negative).

Returns:
The current index
See Also:
getPosition(DbControl, ReporterData, int)

setPositionIndex

public void setPositionIndex(int positionIndex)
Set the index of the curren position.

Parameters:
positionIndex - The new index
See Also:
getPositionIndex(), getPosition(DbControl, ReporterData, int)

getPosition

public int getPosition(DbControl dc,
                       int reporterIndex,
                       int positionIndex)
Get the position number of the position specified by the given reporter and position index. For a given reporter the positions are sorted in ascending order. The reporter index should be a value between 0 and the number of matching reporter minus 1. The position index should be a value between 0 and the number of positions for the given reporter minus 1.

Parameters:
dc -
reporterIndex - The reporter index
positionIndex - The position index
Returns:
The position number or -1 if no position can be found with the given indexes
Since:
2.11
See Also:
getMatchingReporters(DbControl), getNumPositions(DbControl, int)

getPosition

public int getPosition(DbControl dc,
                       ReporterData reporter,
                       int positionIndex)
Deprecated. In 2.11 for performance reasons, use getPosition(DbControl, int, int) instead

Get the position number for the specified reporter and position index. The metod will query the data for all positions with the specified reporter, sort them by position and return the value given by the positionIndex parameter.

Parameters:
dc - The DbControl for database access
reporter - The reporter to look for, or null to find spots without reporter
positionIndex - The index of the position to find
Returns:
The position number

getReporterQuery

public DynamicSpotQuery getReporterQuery(DbControl dc,
                                         List<String> selectionList)
Get a query returning the reporter data used by the reporter search page. Note that the query is DynamicSpotQuery and not a DataQuery. This means that we don't get ReporterData objects as a result and that we must specify the properties to select (see ItemContext.configureQuery(DbControl, DynamicQuery, List)).

The reporter id is always included as the first selected property so it doesn't have to be in the selection list.

Parameters:
dc - The DbControl for database access
selectionList - The properties that the query should select
Returns:
A query
See Also:
ItemContext.configureQuery(DbControl, DynamicQuery, List)

getSpotQuery

public DynamicSpotQuery getSpotQuery(DbControl dc,
                                     ReporterData reporter,
                                     int positionIndex,
                                     List<TableColumn> selectionList)
Deprecated. In 2.11. For performance reasons, use getSpotQuery(DbControl, int, int, List) instead


getSpotQuery

public DynamicSpotQuery getSpotQuery(DbControl dc,
                                     int reporterIndex,
                                     int positionIndex,
                                     List<TableColumn> selectionList)
Get a query returning spot data for a given reporter and position. This query is used by the view page to list the spot data for each bioassay.

The column number is always included as the first selected property. If the SPOT_AVG is specified for positionIndex a count of the number of positions is included as the second selected property. Otherwise, the position number is included as the second selected property.

Then, all channel intensities are selected.

See ItemContext.getDynamicExpression(DbControl, String) for more information about how to specify additional selection properties.

Parameters:
dc - The DbControl for database access
reporterIndex - The index of the reporter
positionIndex - The index of the position, or one the special values SPOT_ALL or SPOT_AVG
selectionList - The data that the query should select
Returns:
A query
Since:
2.11

getReporterIndex

private int getReporterIndex(DbControl dc,
                             ReporterData reporter)
Deprecated. This method is a helper for other deprecated methods. Do not use it in non-deprecated methods.

Look in the cache for the with the given reporter.

Parameters:
reporter - A reporter or null
Returns:
The index or -1 if the reporter is not found

initReporterCache

private void initReporterCache(DbControl dc)

2.17.2: 2011-06-17