org.hackystat.sensorbase.db.postgres
Class PostgresImplementation

java.lang.Object
  extended by org.hackystat.sensorbase.db.DbImplementation
      extended by org.hackystat.sensorbase.db.postgres.PostgresImplementation

public class PostgresImplementation
extends org.hackystat.sensorbase.db.DbImplementation

Provides a implementation of DbImplementation using Postgres.

Author:
Philip Johnson, Austen Ito

Field Summary
static java.lang.String POSTGRES_DB
          The postgres database name.
static java.lang.String POSTGRES_PASSWORD
          The postgres server password.
static java.lang.String POSTGRES_USER
          The postgres server username.
 
Fields inherited from class org.hackystat.sensorbase.db.DbImplementation
logger, server
 
Constructor Summary
PostgresImplementation(org.hackystat.sensorbase.server.Server server)
          Instantiates the Postgres implementation.
 
Method Summary
 boolean compressTables()
          Always returns true because compression is not supported in this Postgres implementation.
(package private) static java.lang.String constructLikeClauses(java.util.List<java.lang.String> uriPatterns)
          Constructs a set of LIKE clauses corresponding to the passed set of UriPatterns.
 void deleteProject(org.hackystat.sensorbase.resource.users.jaxb.User owner, java.lang.String projectName)
          
 void deleteSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user)
          
 void deleteSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user, javax.xml.datatype.XMLGregorianCalendar timestamp)
          
 void deleteSensorDataType(java.lang.String sdtName)
          
 void deleteUser(java.lang.String email)
          
 java.lang.String getProject(org.hackystat.sensorbase.resource.users.jaxb.User owner, java.lang.String projectName)
          
 java.lang.String getProjectIndex()
          
 java.lang.String getProjectSensorDataSnapshot(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users, javax.xml.datatype.XMLGregorianCalendar startTime, javax.xml.datatype.XMLGregorianCalendar endTime, java.util.List<java.lang.String> uriPatterns, java.lang.String sdt, java.lang.String tool)
          
 org.hackystat.sensorbase.resource.projects.jaxb.ProjectSummary getProjectSummary(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users, javax.xml.datatype.XMLGregorianCalendar startTime, javax.xml.datatype.XMLGregorianCalendar endTime, java.util.List<java.lang.String> uriPatterns, java.lang.String href)
          
 int getRowCount(java.lang.String table)
          .
 java.lang.String getSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user, javax.xml.datatype.XMLGregorianCalendar timestamp)
          
 java.lang.String getSensorDataIndex()
          
 java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users, javax.xml.datatype.XMLGregorianCalendar startTime, javax.xml.datatype.XMLGregorianCalendar endTime, java.util.List<java.lang.String> uriPatterns, int startIndex, int maxInstances)
          
 java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users, javax.xml.datatype.XMLGregorianCalendar startTime, javax.xml.datatype.XMLGregorianCalendar endTime, java.util.List<java.lang.String> uriPatterns, java.lang.String sdt)
          
 java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users, javax.xml.datatype.XMLGregorianCalendar startTime, javax.xml.datatype.XMLGregorianCalendar endTime, java.util.List<java.lang.String> uriPatterns, java.lang.String sdt, java.lang.String tool)
          
 java.lang.String getSensorDataIndex(org.hackystat.sensorbase.resource.users.jaxb.User user)
          
 java.lang.String getSensorDataIndex(org.hackystat.sensorbase.resource.users.jaxb.User user, java.lang.String sdtName)
          
 java.lang.String getSensorDataIndexLastMod(org.hackystat.sensorbase.resource.users.jaxb.User user, javax.xml.datatype.XMLGregorianCalendar lastModStartTime, javax.xml.datatype.XMLGregorianCalendar lastModEndTime)
          
 java.lang.String getSensorDataType(java.lang.String sdtName)
          
 java.lang.String getSensorDataTypeIndex()
          
 java.util.Set<java.lang.String> getTableNames()
          
 java.lang.String getUser(java.lang.String email)
          
 java.lang.String getUserIndex()
          
 boolean hasSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user, javax.xml.datatype.XMLGregorianCalendar timestamp)
          
 boolean indexTables()
          Always returns true because indexing is not supported in this Postgres implementation.
 void initialize()
          
 boolean isFreshlyCreated()
          
 boolean storeProject(org.hackystat.sensorbase.resource.projects.jaxb.Project project, java.lang.String xmlProject, java.lang.String xmlProjectRef)
          
 boolean storeSensorData(org.hackystat.sensorbase.resource.sensordata.jaxb.SensorData data, java.lang.String xmlSensorData, java.lang.String xmlSensorDataRef)
          
 boolean storeSensorDataType(org.hackystat.sensorbase.resource.sensordatatypes.jaxb.SensorDataType sdt, java.lang.String xmlSensorDataType, java.lang.String xmlSensorDataTypeRef)
          
 boolean storeUser(org.hackystat.sensorbase.resource.users.jaxb.User user, java.lang.String xmlUser, java.lang.String xmlUserRef)
          
 
Methods inherited from class org.hackystat.sensorbase.db.DbImplementation
getProjectManager, getSdtManager, getSensorDataManager, getUserManager
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

POSTGRES_DB

public static final java.lang.String POSTGRES_DB
The postgres database name.

See Also:
Constant Field Values

POSTGRES_USER

public static final java.lang.String POSTGRES_USER
The postgres server username.

See Also:
Constant Field Values

POSTGRES_PASSWORD

public static final java.lang.String POSTGRES_PASSWORD
The postgres server password.

See Also:
Constant Field Values
Constructor Detail

PostgresImplementation

public PostgresImplementation(org.hackystat.sensorbase.server.Server server)
Instantiates the Postgres implementation. Throws a Runtime exception if the Postgres jar file cannot be found on the classpath.

Parameters:
server - The SensorBase server instance.
Method Detail

initialize

public void initialize()

Specified by:
initialize in class org.hackystat.sensorbase.db.DbImplementation

storeSensorData

public boolean storeSensorData(org.hackystat.sensorbase.resource.sensordata.jaxb.SensorData data,
                               java.lang.String xmlSensorData,
                               java.lang.String xmlSensorDataRef)

Specified by:
storeSensorData in class org.hackystat.sensorbase.db.DbImplementation

isFreshlyCreated

public boolean isFreshlyCreated()

Specified by:
isFreshlyCreated in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex()

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex(org.hackystat.sensorbase.resource.users.jaxb.User user)

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex(org.hackystat.sensorbase.resource.users.jaxb.User user,
                                           java.lang.String sdtName)

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users,
                                           javax.xml.datatype.XMLGregorianCalendar startTime,
                                           javax.xml.datatype.XMLGregorianCalendar endTime,
                                           java.util.List<java.lang.String> uriPatterns,
                                           java.lang.String sdt)

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

getProjectSensorDataSnapshot

public java.lang.String getProjectSensorDataSnapshot(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users,
                                                     javax.xml.datatype.XMLGregorianCalendar startTime,
                                                     javax.xml.datatype.XMLGregorianCalendar endTime,
                                                     java.util.List<java.lang.String> uriPatterns,
                                                     java.lang.String sdt,
                                                     java.lang.String tool)

Specified by:
getProjectSensorDataSnapshot in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users,
                                           javax.xml.datatype.XMLGregorianCalendar startTime,
                                           javax.xml.datatype.XMLGregorianCalendar endTime,
                                           java.util.List<java.lang.String> uriPatterns,
                                           int startIndex,
                                           int maxInstances)

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

constructLikeClauses

static java.lang.String constructLikeClauses(java.util.List<java.lang.String> uriPatterns)
Constructs a set of LIKE clauses corresponding to the passed set of UriPatterns.

Each UriPattern is translated in the following way:

The new set of 'translated' UriPatterns are now used to generate a set of LIKE clauses with the following form:
 (RESOURCE like 'translatedUriPattern1' escape 'escapeChar1') OR
 (RESOURCE like 'translatedUriPattern2' escape 'escapeChar2') ..
 

There is one special case. If the List(UriPattern) is null, empty, or consists of exactly one UriPattern which is "**" or "*", then the empty string is returned. This is an optimization for the common case where all resources should be matched and so we don't need any LIKE clauses.

We return either the empty string (""), or else a string of the form: " AND ([like clause] AND [like clause] ... )" This enables the return value to be appended to the SELECT statement.

This method is static and package private to support testing. See the class TestConstructUriPattern for example invocations and expected return values.

Parameters:
uriPatterns - The list of uriPatterns.
Returns:
The String to be used in the where clause to check for resource correctness.

getSensorDataIndexLastMod

public java.lang.String getSensorDataIndexLastMod(org.hackystat.sensorbase.resource.users.jaxb.User user,
                                                  javax.xml.datatype.XMLGregorianCalendar lastModStartTime,
                                                  javax.xml.datatype.XMLGregorianCalendar lastModEndTime)

Specified by:
getSensorDataIndexLastMod in class org.hackystat.sensorbase.db.DbImplementation

hasSensorData

public boolean hasSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user,
                             javax.xml.datatype.XMLGregorianCalendar timestamp)

Specified by:
hasSensorData in class org.hackystat.sensorbase.db.DbImplementation

deleteSensorData

public void deleteSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user,
                             javax.xml.datatype.XMLGregorianCalendar timestamp)

Specified by:
deleteSensorData in class org.hackystat.sensorbase.db.DbImplementation

deleteSensorData

public void deleteSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user)

Specified by:
deleteSensorData in class org.hackystat.sensorbase.db.DbImplementation

getSensorData

public java.lang.String getSensorData(org.hackystat.sensorbase.resource.users.jaxb.User user,
                                      javax.xml.datatype.XMLGregorianCalendar timestamp)

Specified by:
getSensorData in class org.hackystat.sensorbase.db.DbImplementation

storeSensorDataType

public boolean storeSensorDataType(org.hackystat.sensorbase.resource.sensordatatypes.jaxb.SensorDataType sdt,
                                   java.lang.String xmlSensorDataType,
                                   java.lang.String xmlSensorDataTypeRef)

Specified by:
storeSensorDataType in class org.hackystat.sensorbase.db.DbImplementation

deleteSensorDataType

public void deleteSensorDataType(java.lang.String sdtName)

Specified by:
deleteSensorDataType in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataTypeIndex

public java.lang.String getSensorDataTypeIndex()

Specified by:
getSensorDataTypeIndex in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataType

public java.lang.String getSensorDataType(java.lang.String sdtName)

Specified by:
getSensorDataType in class org.hackystat.sensorbase.db.DbImplementation

deleteUser

public void deleteUser(java.lang.String email)

Specified by:
deleteUser in class org.hackystat.sensorbase.db.DbImplementation

getUser

public java.lang.String getUser(java.lang.String email)

Specified by:
getUser in class org.hackystat.sensorbase.db.DbImplementation

getUserIndex

public java.lang.String getUserIndex()

Specified by:
getUserIndex in class org.hackystat.sensorbase.db.DbImplementation

storeUser

public boolean storeUser(org.hackystat.sensorbase.resource.users.jaxb.User user,
                         java.lang.String xmlUser,
                         java.lang.String xmlUserRef)

Specified by:
storeUser in class org.hackystat.sensorbase.db.DbImplementation

deleteProject

public void deleteProject(org.hackystat.sensorbase.resource.users.jaxb.User owner,
                          java.lang.String projectName)

Specified by:
deleteProject in class org.hackystat.sensorbase.db.DbImplementation

getProject

public java.lang.String getProject(org.hackystat.sensorbase.resource.users.jaxb.User owner,
                                   java.lang.String projectName)

Specified by:
getProject in class org.hackystat.sensorbase.db.DbImplementation

getProjectIndex

public java.lang.String getProjectIndex()

Specified by:
getProjectIndex in class org.hackystat.sensorbase.db.DbImplementation

getProjectSummary

public org.hackystat.sensorbase.resource.projects.jaxb.ProjectSummary getProjectSummary(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users,
                                                                                        javax.xml.datatype.XMLGregorianCalendar startTime,
                                                                                        javax.xml.datatype.XMLGregorianCalendar endTime,
                                                                                        java.util.List<java.lang.String> uriPatterns,
                                                                                        java.lang.String href)

Specified by:
getProjectSummary in class org.hackystat.sensorbase.db.DbImplementation

storeProject

public boolean storeProject(org.hackystat.sensorbase.resource.projects.jaxb.Project project,
                            java.lang.String xmlProject,
                            java.lang.String xmlProjectRef)

Specified by:
storeProject in class org.hackystat.sensorbase.db.DbImplementation

compressTables

public boolean compressTables()
Always returns true because compression is not supported in this Postgres implementation.

Specified by:
compressTables in class org.hackystat.sensorbase.db.DbImplementation
Returns:
returns true.

getRowCount

public int getRowCount(java.lang.String table)
. This is an estimate, it turns out that postgreSQL has some problems counting its row counts.

Specified by:
getRowCount in class org.hackystat.sensorbase.db.DbImplementation

getTableNames

public java.util.Set<java.lang.String> getTableNames()

Specified by:
getTableNames in class org.hackystat.sensorbase.db.DbImplementation

getSensorDataIndex

public java.lang.String getSensorDataIndex(java.util.List<org.hackystat.sensorbase.resource.users.jaxb.User> users,
                                           javax.xml.datatype.XMLGregorianCalendar startTime,
                                           javax.xml.datatype.XMLGregorianCalendar endTime,
                                           java.util.List<java.lang.String> uriPatterns,
                                           java.lang.String sdt,
                                           java.lang.String tool)

Specified by:
getSensorDataIndex in class org.hackystat.sensorbase.db.DbImplementation

indexTables

public boolean indexTables()
Always returns true because indexing is not supported in this Postgres implementation.

Specified by:
indexTables in class org.hackystat.sensorbase.db.DbImplementation
Returns:
returns true.