com.compomics.util.experiment.identification
Class Identification

java.lang.Object
  extended by com.compomics.util.experiment.personalization.ExperimentObject
      extended by com.compomics.util.experiment.identification.Identification
All Implemented Interfaces:
Serializable, Cloneable
Direct Known Subclasses:
Ms2Identification

public abstract class Identification
extends ExperimentObject

This class contains identification results.

Author:
Marc Vaudel
See Also:
Serialized Form

Field Summary
protected  boolean automatedMemoryManagement
          boolean indicating whether the memory management should be done automatically.
protected  int cacheSize
          The cache size in number of matches. 20000 by default: should be enough to contain a velos file.
static String EXTENTION
          Deprecated. use the database methods instead
protected  boolean inMemory
          boolean indicating whether the identification should be stored in memory or not.
protected  ArrayList<String> loadedMatches
          List of the loaded matches with the most used matches in the end.
protected  HashMap<String,IdentificationMatch> loadedMatchesMap
          Map of the loaded matches.
protected  ArrayList<String> longKeys
          Map of long keys (>100 characters) which will be referenced by their index for file creation/database storage.
protected  int methodUsed
          The method used.
protected  HashMap<String,Boolean> modifiedMatches
          Map indicating whether a match is modified.
protected  ArrayList<String> peptideIdentification
          List of the keys of all imported peptides.
protected  ArrayList<String> proteinIdentification
          List of the keys of all imported proteins.
protected  HashMap<String,ArrayList<String>> proteinMap
          a map linking protein accessions to all their protein matches keys.
protected  String serializationDirectory
          the directory where matches will be serialized/the database stored
protected  ArrayList<String> spectrumIdentification
          List of the keys of all imported psms.
protected  HashMap<String,HashMap<String,UrParameter>> urParameters
          Deprecated. use the database instead
 
Constructor Summary
Identification()
           
 
Method Summary
 void addMatchParameter(String key, UrParameter urParameter)
          Deprecated. use the database match specific methods instead
 void addPeptideMatchParameter(String key, UrParameter urParameter)
          Adds a peptide match parameter to the database
 void addProteinMatchParameter(String key, UrParameter urParameter)
          Adds a protein match parameter to the database
 void addSpectrumMatch(Set<SpectrumMatch> spectrumMatches)
          Add a set of spectrumMatches to the model.
 void addSpectrumMatch(SpectrumMatch newMatch)
          Adds a spectrum match to the identification
 void addSpectrumMatchParameter(String key, UrParameter urParameter)
          Adds a spectrum match parameter to the database
 void buildPeptidesAndProteins(JProgressBar progressBar)
          Creates the peptides and protein instances based on the spectrum matches.
 void buildPeptidesAndProteins(String spectrumMatchKey)
          Creates the peptides and protein instances based on the given spectrum match.
 void close()
          Closes the database connection
 void convert(ProgressDialogX progressDialog, String newDirectory)
          Converts a serlialization based structure into a database based one
 void emptyCache(ProgressDialogX progressDialog)
          Empties the cache and serializes everything in the specified serialization folder or in the database.
 void establishConnection()
          Establishes a connection to the database
 int getCacheSize()
          Returns the cache size in number of matches.
 String getFileName(String key)
          Deprecated. use the database methods instead
 UrParameter getMatchParameter(String matchKey, UrParameter urParameter)
          Deprecated. use the database match specific methods instead
 IdentificationMatch.MatchType getMatchType(String matchKey)
          Returns the kind of match pointed by the given key in the identification mappings.
 int getMethodUsed()
          Getter for the identification method used.
 ArrayList<String> getPeptideIdentification()
          Returns a list of the keys of all encountered peptides.
 PeptideMatch getPeptideMatch(String peptideKey)
          Returns a peptide match.
 UrParameter getPeptideMatchParameter(String key, UrParameter urParameter)
          Returns the desired peptide match parameter
 ArrayList<String> getProteinIdentification()
          Returns a list of the keys of all encountered proteins.
 HashMap<String,ArrayList<String>> getProteinMap()
          Returns a map of all the protein matches which can be ascribed to a protein indexed by its accession.
 ProteinMatch getProteinMatch(String proteinKey)
          Returns a protein match.
 UrParameter getProteinMatchPArameter(String key, UrParameter urParameter)
          Returns the desired protein match parameter
 String getSerializationDirectory()
          Returns the serialization directory.
 ArrayList<String> getSpectrumIdentification()
          Returns a list of the keys of all encountered psms.
 SpectrumMatch getSpectrumMatch(String spectrumKey)
          Returns a spectrum match.
 UrParameter getSpectrumMatchParameter(String key, UrParameter urParameter)
          Returns the desired spectrum match parameter.
 boolean isAutomatedMemoryManagement()
          Returns whether the memory management is automated.
 Boolean isDB()
          Indicates whether the identification matches should be stored in a database (true, default value) or serialized files (false, deprecated default).
 boolean isInMemory()
          Indicates whether matches will be stored in memory.
 boolean matchExists(String matchKey)
          Indicates whether a match indexed by the given key exists.
 boolean memoryCheck()
          Indicates whether the memory used by the application is lower than 99% of the heap size.
 void reduceMemoryConsumtion(JProgressBar progressBar)
          Reduces the amount of identification saved in memory by 20%.
 void removeMatch(String matchKey)
          Deprecated. it is advised to use the specific psm/peptide/protein method instead
 void removePeptideMatch(String matchKey)
          Removes a peptide match from the model.
 void removeProteinMatch(String matchKey)
          Removes a protein match from the model.
 void removeSpectrumMatch(String matchKey)
          Removes a spectrum match from the model.
 void setAutomatedMemoryManagement(boolean automatedMemoryManagement)
          Sets whether the memory management should be automated.
 void setCacheSize(int cacheSize)
          Sets the cache size.
 void setDirectory(String serializationDirectory)
          sets the directory where matches will be stored in order to save memory.
 void setInMemory(boolean inMemory)
          Sets whether matches shall be stored in memory.
 void setIsDB(Boolean isDB)
          Sets whether the identification matches should be stored in a database or serialized files
 void setMatchChanged(IdentificationMatch match)
          Indicates that a match was changed, it will thus be serialized again if needed.
 void updateCache()
          Updates the cache according to the memory settings.
 void updatePeptideMatchParameter(String key, UrParameter urParameter)
          Updates a peptide match parameter in the database
 void updateProteinMatchParameter(String key, UrParameter urParameter)
          Updates a protein match parameter in the database
 void updateSpectrumMatchParameter(String key, UrParameter urParameter)
          Updates a spectrum match parameter in the database
 
Methods inherited from class com.compomics.util.experiment.personalization.ExperimentObject
addUrParam, getParameterKey, getUrParam
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EXTENTION

public static final String EXTENTION
Deprecated. use the database methods instead
Extention for a serialized hit. cuh for Compomics Utilities Hit.

See Also:
Constant Field Values

proteinIdentification

protected ArrayList<String> proteinIdentification
List of the keys of all imported proteins.


peptideIdentification

protected ArrayList<String> peptideIdentification
List of the keys of all imported peptides.


spectrumIdentification

protected ArrayList<String> spectrumIdentification
List of the keys of all imported psms.


proteinMap

protected HashMap<String,ArrayList<String>> proteinMap
a map linking protein accessions to all their protein matches keys.


methodUsed

protected int methodUsed
The method used.


cacheSize

protected int cacheSize
The cache size in number of matches. 20000 by default: should be enough to contain a velos file.


serializationDirectory

protected String serializationDirectory
the directory where matches will be serialized/the database stored


inMemory

protected boolean inMemory
boolean indicating whether the identification should be stored in memory or not. True by default, the serialization directory should be set otherwise.


automatedMemoryManagement

protected boolean automatedMemoryManagement
boolean indicating whether the memory management should be done automatically. If true, the cache size will be extended to reach 99% of the available heap size when inMemory is wrong. True by default.


loadedMatchesMap

protected HashMap<String,IdentificationMatch> loadedMatchesMap
Map of the loaded matches.


loadedMatches

protected ArrayList<String> loadedMatches
List of the loaded matches with the most used matches in the end.


modifiedMatches

protected HashMap<String,Boolean> modifiedMatches
Map indicating whether a match is modified. Only modified matches will be serialized.


urParameters

protected HashMap<String,HashMap<String,UrParameter>> urParameters
Deprecated. use the database instead
Map of the user's parameters.


longKeys

protected ArrayList<String> longKeys
Map of long keys (>100 characters) which will be referenced by their index for file creation/database storage. @TODO implement this for db keys?

Constructor Detail

Identification

public Identification()
Method Detail

addMatchParameter

public void addMatchParameter(String key,
                              UrParameter urParameter)
                       throws SQLException,
                              IOException
Deprecated. use the database match specific methods instead

Adds a parameter with a corresponding match key which will be loaded in the memory. Use this method only for frequently used parameters, otherwise attach the parameters to the matches.

Parameters:
key - the key of the parameter
urParameter - the additional parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

getMatchParameter

public UrParameter getMatchParameter(String matchKey,
                                     UrParameter urParameter)
                              throws SQLException,
                                     IOException,
                                     ClassNotFoundException
Deprecated. use the database match specific methods instead

Returns the personalization parameter of the given match.

Parameters:
matchKey - the match key
urParameter - example of parameter to retrieve
Returns:
the personalization parameter
Throws:
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

getSpectrumMatchParameter

public UrParameter getSpectrumMatchParameter(String key,
                                             UrParameter urParameter)
                                      throws SQLException,
                                             IOException,
                                             ClassNotFoundException
Returns the desired spectrum match parameter.

Parameters:
key - the psm key
urParameter - the match parameter
Returns:
the spectrum match parameter
Throws:
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

addSpectrumMatchParameter

public void addSpectrumMatchParameter(String key,
                                      UrParameter urParameter)
                               throws SQLException,
                                      IOException
Adds a spectrum match parameter to the database

Parameters:
key - the psm key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

getPeptideMatchParameter

public UrParameter getPeptideMatchParameter(String key,
                                            UrParameter urParameter)
                                     throws SQLException,
                                            IOException,
                                            ClassNotFoundException
Returns the desired peptide match parameter

Parameters:
key - the peptide key
urParameter - the match parameter
Returns:
the peptide match parameter
Throws:
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

addPeptideMatchParameter

public void addPeptideMatchParameter(String key,
                                     UrParameter urParameter)
                              throws SQLException,
                                     IOException
Adds a peptide match parameter to the database

Parameters:
key - the peptide key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

getProteinMatchPArameter

public UrParameter getProteinMatchPArameter(String key,
                                            UrParameter urParameter)
                                     throws SQLException,
                                            IOException,
                                            ClassNotFoundException
Returns the desired protein match parameter

Parameters:
key - the protein key
urParameter - the match parameter
Returns:
the protein match parameter
Throws:
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

addProteinMatchParameter

public void addProteinMatchParameter(String key,
                                     UrParameter urParameter)
                              throws SQLException,
                                     IOException
Adds a protein match parameter to the database

Parameters:
key - the protein key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

updateProteinMatchParameter

public void updateProteinMatchParameter(String key,
                                        UrParameter urParameter)
                                 throws SQLException,
                                        IOException
Updates a protein match parameter in the database

Parameters:
key - the protein key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

updatePeptideMatchParameter

public void updatePeptideMatchParameter(String key,
                                        UrParameter urParameter)
                                 throws SQLException,
                                        IOException
Updates a peptide match parameter in the database

Parameters:
key - the peptide key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

updateSpectrumMatchParameter

public void updateSpectrumMatchParameter(String key,
                                         UrParameter urParameter)
                                  throws SQLException,
                                         IOException
Updates a spectrum match parameter in the database

Parameters:
key - the spectrum key
urParameter - the match parameter
Throws:
SQLException - exception thrown whenever an error occurred while adding the object in the database
IOException - exception thrown whenever an error occurred while writing the object

isAutomatedMemoryManagement

public boolean isAutomatedMemoryManagement()
Returns whether the memory management is automated.

Returns:
whether the memory management is automated.

setAutomatedMemoryManagement

public void setAutomatedMemoryManagement(boolean automatedMemoryManagement)
Sets whether the memory management should be automated.

Parameters:
automatedMemoryManagement - a boolean indicating whether the memory management should be automated

getCacheSize

public int getCacheSize()
Returns the cache size in number of matches.

Returns:
the cache size in number of matches

setCacheSize

public void setCacheSize(int cacheSize)
Sets the cache size.

Parameters:
cacheSize - number of matches to allow in the cache size

isInMemory

public boolean isInMemory()
Indicates whether matches will be stored in memory.

Returns:
a boolean indicating whether matches will be stored in memory

setInMemory

public void setInMemory(boolean inMemory)
Sets whether matches shall be stored in memory.

Parameters:
inMemory - a boolean indicating whether matches shall be stored in memory

getSerializationDirectory

public String getSerializationDirectory()
Returns the serialization directory.

Returns:
the serialization directory

setDirectory

public void setDirectory(String serializationDirectory)
                  throws SQLException
sets the directory where matches will be stored in order to save memory. Matches can be stored in a database (default) or serialized files. If the database option is chosen (see setIsDB(Boolean isDB)) and no database created, the database will be created in the folder.

Parameters:
serializationDirectory - the path of the directory
Throws:
SQLException

removeMatch

public void removeMatch(String matchKey)
                 throws IllegalArgumentException,
                        SQLException
Deprecated. it is advised to use the specific psm/peptide/protein method instead

Removes a match from the model.

Parameters:
matchKey - the key of the match to remove
Throws:
IllegalArgumentException
SQLException - exception thrown whenever an error occurred while deleting the match

removeSpectrumMatch

public void removeSpectrumMatch(String matchKey)
                         throws IllegalArgumentException,
                                SQLException
Removes a spectrum match from the model.

Parameters:
matchKey - the key of the match to remove
Throws:
IllegalArgumentException
SQLException - exception thrown whenever an error occurred while deleting the match

removePeptideMatch

public void removePeptideMatch(String matchKey)
                        throws IllegalArgumentException,
                               SQLException
Removes a peptide match from the model.

Parameters:
matchKey - the key of the match to remove
Throws:
IllegalArgumentException
SQLException - exception thrown whenever an error occurred while deleting the match

removeProteinMatch

public void removeProteinMatch(String matchKey)
                        throws IllegalArgumentException,
                               SQLException
Removes a protein match from the model.

Parameters:
matchKey - the key of the match to remove
Throws:
IllegalArgumentException
SQLException - exception thrown whenever an error occurred while deleting the match

matchExists

public boolean matchExists(String matchKey)
Indicates whether a match indexed by the given key exists.

Parameters:
matchKey - the key of the match looked for
Returns:
a boolean indicating whether a match indexed by the given key exists

getSpectrumMatch

public SpectrumMatch getSpectrumMatch(String spectrumKey)
                               throws IllegalArgumentException,
                                      SQLException,
                                      IOException,
                                      ClassNotFoundException
Returns a spectrum match.

Parameters:
spectrumKey - the key of the match
Returns:
the desired match
Throws:
IllegalArgumentException - exception thrown whenever an error occurred while retrieving the match
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

getPeptideMatch

public PeptideMatch getPeptideMatch(String peptideKey)
                             throws IllegalArgumentException,
                                    SQLException,
                                    IOException,
                                    ClassNotFoundException
Returns a peptide match.

Parameters:
peptideKey - the key of the match
Returns:
the desired match
Throws:
IllegalArgumentException - exception thrown whenever an error occurred while retrieving the match
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

getProteinMatch

public ProteinMatch getProteinMatch(String proteinKey)
                             throws IllegalArgumentException,
                                    SQLException,
                                    IOException,
                                    ClassNotFoundException
Returns a protein match.

Parameters:
proteinKey - the key of the match
Returns:
the desired match
Throws:
IllegalArgumentException - exception thrown whenever an error occurred while retrieving the match
SQLException - exception thrown whenever an error occurred while loading the object from the database
IOException - exception thrown whenever an error occurred while reading the object in the database
ClassNotFoundException - exception thrown whenever an error occurred while casting the database input in the desired match class

getProteinIdentification

public ArrayList<String> getProteinIdentification()
Returns a list of the keys of all encountered proteins.

Returns:
the corresponding identification results

getPeptideIdentification

public ArrayList<String> getPeptideIdentification()
Returns a list of the keys of all encountered peptides.

Returns:
the corresponding identification results

getSpectrumIdentification

public ArrayList<String> getSpectrumIdentification()
Returns a list of the keys of all encountered psms.

Returns:
the corresponding identification results

addSpectrumMatch

public void addSpectrumMatch(SpectrumMatch newMatch)
                      throws FileNotFoundException,
                             IOException,
                             IllegalArgumentException,
                             SQLException,
                             ClassNotFoundException
Adds a spectrum match to the identification

Parameters:
newMatch - the new match
Throws:
FileNotFoundException - exception thrown whenever an error occurred while saving the file
IOException - exception thrown whenever an error occurred while saving the file
IllegalArgumentException - exception thrown whenever an error occurred while saving the file
SQLException - exception thrown whenever an error occurred while saving the file
ClassNotFoundException - exception thrown whenever an error occurred while saving the file

updateCache

public void updateCache()
                 throws FileNotFoundException,
                        IOException,
                        SQLException,
                        ClassNotFoundException
Updates the cache according to the memory settings.

Throws:
FileNotFoundException - exception thrown whenever an error occurred while serializing a match
IOException - exception thrown whenever an error occurred while serializing a match
SQLException
ClassNotFoundException

memoryCheck

public boolean memoryCheck()
Indicates whether the memory used by the application is lower than 99% of the heap size.

Returns:
a boolean indicating whether the memory used by the application is lower than 99% of the heap

reduceMemoryConsumtion

public void reduceMemoryConsumtion(JProgressBar progressBar)
                            throws FileNotFoundException,
                                   IOException,
                                   SQLException
Reduces the amount of identification saved in memory by 20%.

Parameters:
progressBar - the progress bar
Throws:
FileNotFoundException - exception thrown whenever an error occurred while serializing a match
IOException - exception thrown whenever an error occurred while serializing a match or reading the database
SQLException - exception thrown whenever an error occurred while adding the object in the database

buildPeptidesAndProteins

public void buildPeptidesAndProteins(JProgressBar progressBar)
                              throws IllegalArgumentException,
                                     SQLException,
                                     IOException,
                                     ClassNotFoundException
Creates the peptides and protein instances based on the spectrum matches. Note that the attribute bestAssumption should be set for every spectrum match at this point. This operation will be very slow if the cache is already full.

Parameters:
progressBar - the progress bar
Throws:
IllegalArgumentException
SQLException
IOException
ClassNotFoundException

buildPeptidesAndProteins

public void buildPeptidesAndProteins(String spectrumMatchKey)
                              throws IllegalArgumentException,
                                     SQLException,
                                     IOException,
                                     ClassNotFoundException
Creates the peptides and protein instances based on the given spectrum match. Note that the attribute bestAssumption should be set for every spectrum match at this point. This operation will be very slow if the cache is already full.

Parameters:
spectrumMatchKey - The key of the spectrum match to add
Throws:
IllegalArgumentException
SQLException
IOException
ClassNotFoundException

emptyCache

public void emptyCache(ProgressDialogX progressDialog)
                throws FileNotFoundException,
                       IOException,
                       SQLException
Empties the cache and serializes everything in the specified serialization folder or in the database.

Parameters:
progressDialog -
cancelProgress - set this to true to cancel the progress
Throws:
FileNotFoundException - exception thrown whenever an error occurred while serializing a match
IOException - exception thrown whenever an error occurred while serializing a match
SQLException

addSpectrumMatch

public void addSpectrumMatch(Set<SpectrumMatch> spectrumMatches)
                      throws FileNotFoundException,
                             IOException,
                             IllegalArgumentException,
                             SQLException,
                             ClassNotFoundException
Add a set of spectrumMatches to the model.

Parameters:
spectrumMatches - The spectrum matches
Throws:
FileNotFoundException - exception thrown whenever an error occurred while saving the file
IOException - exception thrown whenever an error occurred while saving the file
IllegalArgumentException - exception thrown whenever an error occurred while saving the file
SQLException - exception thrown whenever an error occurred while saving the file
ClassNotFoundException - exception thrown whenever an error occurred while saving the file

getMethodUsed

public int getMethodUsed()
Getter for the identification method used.

Returns:
the identification method used

getProteinMap

public HashMap<String,ArrayList<String>> getProteinMap()
Returns a map of all the protein matches which can be ascribed to a protein indexed by its accession.

Returns:
a map of all the protein matches which can be ascribed to a protein indexed by its accession.

setMatchChanged

public void setMatchChanged(IdentificationMatch match)
                     throws IllegalArgumentException,
                            IOException,
                            SQLException
Indicates that a match was changed, it will thus be serialized again if needed.

Parameters:
match -
Throws:
IllegalArgumentException
IOException
SQLException

getFileName

public String getFileName(String key)
Deprecated. use the database methods instead

Returns the name of the file to use for serialization/deserialization.

Parameters:
key - the key of the match
Returns:
the name of the corresponding file

isDB

public Boolean isDB()
Indicates whether the identification matches should be stored in a database (true, default value) or serialized files (false, deprecated default).

Returns:
a boolean indicating whether the identification matches should be stored in a database or serialized files

setIsDB

public void setIsDB(Boolean isDB)
Sets whether the identification matches should be stored in a database or serialized files

Parameters:
isDB - a boolean indicating whether the identification matches should be stored in a database or serialized files

close

public void close()
           throws SQLException
Closes the database connection

Throws:
SQLException - exception thrown whenever an error occurred while closing the database connection

getMatchType

public IdentificationMatch.MatchType getMatchType(String matchKey)
Returns the kind of match pointed by the given key in the identification mappings. Null if missing from the mapping.

Parameters:
matchKey - the match key
Returns:
the kind of match

establishConnection

public void establishConnection()
                         throws SQLException
Establishes a connection to the database

Throws:
SQLException - exception thrown whenever an error occurred while establishing the connection

convert

public void convert(ProgressDialogX progressDialog,
                    String newDirectory)
             throws FileNotFoundException,
                    IOException,
                    ClassNotFoundException,
                    SQLException
Converts a serlialization based structure into a database based one

Parameters:
progressDialog - a dialog to give progress feedback to the user
cancelProgress - boolean allowing canceling the process, this will corrupt the project.
newDirectory - the new directory where to store the data
Throws:
FileNotFoundException - exception thrown whenever a file is not found
IOException - exception thrown whenever an error occurred while reading/writing a file
ClassNotFoundException - exception thrown whenever an error occurred while deserializing a match
SQLException - exception thrown whenever an error occurred while interacting with the database


Copyright © 2012. All Rights Reserved.